/// <inheritdoc />
 protected override void EllipticalInverse(double[] xy, double[] lp, int startIndex, int numPoints)
 {
     for (int i = startIndex; i < startIndex + numPoints; i++)
     {
         int    phi = i * 2 + PHI;
         int    lam = i * 2 + LAMBDA;
         int    x   = i * 2 + X;
         int    y   = i * 2 + Y;
         double ab;
         double cx = xy[x];
         double cy = xy[y];
         if (_mode == Modes.Equitorial || _mode == Modes.Oblique)
         {
             double rho = Proj.Hypot(cx /= _dd, cy * _dd);
             if (rho < EPS10)
             {
                 lp[lam] = 0;
                 lp[phi] = Phi0;
                 return;
             }
             double sCe;
             double cCe = Math.Cos(sCe = 2 * Math.Asin(.5 * rho / _rq));
             cx *= (sCe = Math.Sin(sCe));
             if (_mode == Modes.Oblique)
             {
                 ab = cCe * _sinb1 + y * sCe * _cosb1 / rho;
                 //q = _qp*(ab);
                 cy = rho * _cosb1 * cCe - cy * _sinb1 * sCe;
             }
             else
             {
                 ab = cy * sCe / rho;
                 //q = _qp*(ab);
                 cy = rho * cCe;
             }
         }
         else
         {
             if (_mode == Modes.NorthPole)
             {
                 cy = -cy;
             }
             double q;
             if ((q = (cx * cx + cy * cy)) == 0)
             {
                 lp[lam] = 0;
                 lp[phi] = Phi0;
                 return;
             }
             ab = 1 - q / _qp;
             if (_mode == Modes.SouthPole)
             {
                 ab = -ab;
             }
         }
         lp[lam] = Math.Atan2(cx, cy);
         lp[phi] = Proj.AuthLat(Math.Asin(ab), _apa);
     }
 }
示例#2
0
 /// <inheritdoc />
 protected override void EllipticalInverse(double[] xy, double[] lp, int startIndex, int numPoints)
 {
     for (int i = startIndex; i < startIndex + numPoints; i++)
     {
         int phi = i * 2 + PHI;
         int lam = i * 2 + LAMBDA;
         int x   = i * 2 + X;
         int y   = i * 2 + Y;
         lp[phi] = Proj.AuthLat(Math.Asin(2 * xy[y] * K0 / _qp), _apa);
         lp[lam] = xy[x] / K0;
     }
 }