/// <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]; } } }