/// <inheritdoc />
 protected override void OnForward(double[] lp, double[] xy, 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 t, dl1, dl2;
         double sp = Math.Sin(lp[phi]);
         double cp = Math.Cos(lp[phi]);
         double z1 = Proj.Aacos(_sp1 * sp + _cp1 * cp * Math.Cos(dl1 = lp[lam] + _dlam2));
         double z2 = Proj.Aacos(_sp2 * sp + _cp2 * cp * Math.Cos(dl2 = lp[lam] - _dlam2));
         z1   *= z1;
         z2   *= z2;
         xy[x] = _r2Z0 * (t = z1 - z2);
         t     = _z02 - t;
         xy[y] = _r2Z0 * Proj.Asqrt(4 * _z02 * z2 - t * t);
         if ((_ccs * sp - cp * (_cs * Math.Sin(dl1) - _sc * Math.Sin(dl2))) < 0)
         {
             xy[y] = -xy[y];
         }
     }
 }