Coverage Report

Created: 2025-06-13 06:29

/src/proj/src/projections/collg.cpp
Line
Count
Source (jump to first uncovered line)
1
2
3
#include <math.h>
4
5
#include "proj.h"
6
#include "proj_internal.h"
7
8
PROJ_HEAD(collg, "Collignon") "\n\tPCyl, Sph";
9
0
#define FXC 1.12837916709551257390
10
0
#define FYC 1.77245385090551602729
11
0
#define ONEEPS 1.0000001
12
13
0
static PJ_XY collg_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */
14
0
    PJ_XY xy = {0.0, 0.0};
15
0
    (void)P;
16
0
    xy.y = 1. - sin(lp.phi);
17
0
    if (xy.y <= 0.)
18
0
        xy.y = 0.;
19
0
    else
20
0
        xy.y = sqrt(xy.y);
21
0
    xy.x = FXC * lp.lam * xy.y;
22
0
    xy.y = FYC * (1. - xy.y);
23
0
    return (xy);
24
0
}
25
26
0
static PJ_LP collg_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */
27
0
    PJ_LP lp = {0.0, 0.0};
28
0
    lp.phi = xy.y / FYC - 1.;
29
0
    lp.phi = 1. - lp.phi * lp.phi;
30
0
    if (fabs(lp.phi) < 1.)
31
0
        lp.phi = asin(lp.phi);
32
0
    else if (fabs(lp.phi) > ONEEPS) {
33
0
        proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
34
0
        return lp;
35
0
    } else {
36
0
        lp.phi = lp.phi < 0. ? -M_HALFPI : M_HALFPI;
37
0
    }
38
39
0
    lp.lam = 1. - sin(lp.phi);
40
0
    if (lp.lam <= 0.)
41
0
        lp.lam = 0.;
42
0
    else
43
0
        lp.lam = xy.x / (FXC * sqrt(lp.lam));
44
0
    return (lp);
45
0
}
46
47
4
PJ *PJ_PROJECTION(collg) {
48
4
    P->es = 0.0;
49
4
    P->inv = collg_s_inverse;
50
4
    P->fwd = collg_s_forward;
51
52
4
    return P;
53
4
}
54
55
#undef FXC
56
#undef FYC
57
#undef ONEEPS