Statistics
| Revision:

svn-gvsig-desktop / tags / v1_9_Build_1242 / libraries / libjni-proj4 / src / PJ_putp2.c @ 44345

History | View | Annotate | Download (1.09 KB)

1
#ifndef lint
2
static const char SCCSID[]="@(#)PJ_putp2.c        4.1        94/02/15        GIE        REL";
3
#endif
4
#define PJ_LIB__
5
#include        <projects.h>
6
PROJ_HEAD(putp2, "Putnins P2") "\n\tPCyl., Sph.";
7
#define C_x        1.89490
8
#define C_y        1.71848
9
#define C_p 0.6141848493043784
10
#define EPS        1e-10
11
#define NITER        10
12
#define PI_DIV_3        1.0471975511965977
13
FORWARD(s_forward); /* spheroid */
14
        double p, c, s, V;
15
        int i;
16

    
17
        p = C_p * sin(lp.phi);
18
        s = lp.phi * lp.phi;
19
        lp.phi *= 0.615709 + s * ( 0.00909953 + s * 0.0046292 );
20
        for (i = NITER; i ; --i) {
21
                c = cos(lp.phi);
22
                s = sin(lp.phi);
23
                lp.phi -= V = (lp.phi + s * (c - 1.) - p) /
24
                        (1. + c * (c - 1.) - s * s);
25
                if (fabs(V) < EPS)
26
                        break;
27
        }
28
        if (!i)
29
                lp.phi = lp.phi < 0 ? - PI_DIV_3 : PI_DIV_3;
30
        xy.x = C_x * lp.lam * (cos(lp.phi) - 0.5);
31
        xy.y = C_y * sin(lp.phi);
32
        return (xy);
33
}
34
INVERSE(s_inverse); /* spheroid */
35
        double c;
36

    
37
        lp.phi = aasin(xy.y / C_y);
38
        lp.lam = xy.x / (C_x * ((c = cos(lp.phi)) - 0.5));
39
        lp.phi = aasin((lp.phi + sin(lp.phi) * (c - 1.)) / C_p);
40
        return (lp);
41
}
42
FREEUP; if (P) pj_dalloc(P); }
43
ENTRY0(putp2) P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P)