1 #define PJ_LIB__
2 #include <projects.h>
3
4 PROJ_HEAD(denoy, "Denoyer Semi-Elliptical") "\n\tPCyl., no inv., Sph.";
5
6 #define C0 0.95
7 #define C1 -0.08333333333333333333
8 #define C3 0.00166666666666666666
9 #define D1 0.9
10 #define D5 0.03
11
12
s_forward(LP lp,PJ * P)13 static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */
14 XY xy = {0.0, 0.0};
15 (void) P;
16 xy.y = lp.phi;
17 xy.x = lp.lam;
18 lp.lam = fabs(lp.lam);
19 xy.x *= cos((C0 + lp.lam * (C1 + lp.lam * lp.lam * C3)) *
20 (lp.phi * (D1 + D5 * lp.phi * lp.phi * lp.phi * lp.phi)));
21 return xy;
22 }
23
24
freeup_new(PJ * P)25 static void *freeup_new (PJ *P) { /* Destructor */
26 return pj_dealloc(P);
27 }
28
freeup(PJ * P)29 static void freeup (PJ *P) {
30 freeup_new (P);
31 return;
32 }
33
34
PROJECTION(denoy)35 PJ *PROJECTION(denoy) {
36 P->es = 0.0;
37 P->fwd = s_forward;
38
39 return P;
40 }
41
42 #ifndef PJ_SELFTEST
pj_denoy_selftest(void)43 int pj_denoy_selftest (void) {return 0;}
44 #else
45
pj_denoy_selftest(void)46 int pj_denoy_selftest (void) {
47 double tolerance_xy = 1e-7;
48
49 char s_args[] = {"+proj=denoy +a=6400000 +lat_1=0.5 +lat_2=2"};
50
51 LP fwd_in[] = {
52 { 2, 1},
53 { 2,-1},
54 {-2, 1},
55 {-2,-1}
56 };
57
58 XY s_fwd_expect[] = {
59 { 223377.422876954137, 111701.07212763709},
60 { 223377.422876954137, -111701.07212763709},
61 {-223377.422876954137, 111701.07212763709},
62 {-223377.422876954137, -111701.07212763709},
63 };
64
65 return pj_generic_selftest (0, s_args, tolerance_xy, 0, 4, 4, fwd_in, 0, s_fwd_expect, 0, 0, 0);
66 }
67
68
69 #endif
70