Example #1
0
        // dervative of (P.fwd) projection
        public static bool pj_deriv(LP lp, double h, PJ P, out DERIVS der)
        {
            der.x_l = der.y_p = der.x_p = der.y_l = 0;

            XY t;

            lp.lam += h;
            lp.phi += h;
            if (Math.Abs(lp.phi) > Proj.HALFPI)
            {
                return(true);
            }

            h += h;
            t  = P.fwd(lp);
            if (t.x == Libc.HUGE_VAL)
            {
                return(true);
            }

            der.x_l = t.x; der.y_p = t.y; der.x_p = -t.x; der.y_l = -t.y;
            lp.phi -= h;
            if (Math.Abs(lp.phi) > Proj.HALFPI)
            {
                return(true);
            }

            t = P.fwd(lp);
            if (t.x == Libc.HUGE_VAL)
            {
                return(true);
            }

            der.x_l += t.x; der.y_p -= t.y; der.x_p += t.x; der.y_l -= t.y;
            lp.lam  -= h;

            t = P.fwd(lp);
            if (t.x == Libc.HUGE_VAL)
            {
                return(true);
            }

            der.x_l -= t.x; der.y_p -= t.y; der.x_p += t.x; der.y_l += t.y;
            lp.phi  += h;

            t = P.fwd(lp);
            if (t.x == Libc.HUGE_VAL)
            {
                return(true);
            }

            der.x_l -= t.x; der.y_p += t.y; der.x_p -= t.x; der.y_l += t.y;
            der.x_l /= (h += h);
            der.y_p /= h;
            der.x_p /= h;
            der.y_l /= h;

            return(false);
        }
Example #2
0
        // spheroid
        XY o_forward(LP lp)
        {
            double coslam = Math.Cos(lp.lam);
            double sinphi = Math.Sin(lp.phi);
            double cosphi = Math.Cos(lp.phi);

            lp.lam = Proj.adjlon(Proj.aatan2(cosphi * Math.Sin(lp.lam), sphip * cosphi * coslam + cphip * sinphi) + lamp);
            lp.phi = Proj.aasin(ctx, sphip * sinphi - cphip * cosphi * coslam);

            return(link.fwd(lp));
        }
Example #3
0
        // dervative of (P.fwd) projection
        public static bool pj_deriv(LP lp, double h, PJ P, out DERIVS der)
        {
            der.x_l=der.y_p=der.x_p=der.y_l=0;

            XY t;

            lp.lam+=h;
            lp.phi+=h;
            if(Math.Abs(lp.phi)>Proj.HALFPI) return true;

            h+=h;
            t=P.fwd(lp);
            if(t.x==Libc.HUGE_VAL) return true;

            der.x_l=t.x; der.y_p=t.y; der.x_p=-t.x; der.y_l=-t.y;
            lp.phi-=h;
            if(Math.Abs(lp.phi)>Proj.HALFPI) return true;

            t=P.fwd(lp);
            if(t.x==Libc.HUGE_VAL) return true;

            der.x_l+=t.x; der.y_p-=t.y; der.x_p+=t.x; der.y_l-=t.y;
            lp.lam-=h;

            t=P.fwd(lp);
            if(t.x==Libc.HUGE_VAL) return true;

            der.x_l-=t.x; der.y_p-=t.y; der.x_p+=t.x; der.y_l+=t.y;
            lp.phi+=h;

            t=P.fwd(lp);
            if(t.x==Libc.HUGE_VAL) return true;

            der.x_l-=t.x; der.y_p+=t.y; der.x_p-=t.x; der.y_l+=t.y;
            der.x_l/=(h+=h);
            der.y_p/=h;
            der.x_p/=h;
            der.y_l/=h;

            return false;
        }
Example #4
0
        // spheroid
        XY s_forward(LP lp)
        {
            XY xy;

            xy.x = xy.y = 0;

            if (Math.Abs(lp.phi) <= PHI_LIM)
            {
                xy = sinu.fwd(lp);
            }
            else
            {
                xy    = moll.fwd(lp);
                xy.y -= (lp.phi >= 0.0?Y_COR:-Y_COR);
            }

            return(xy);
        }