private bool GetSphereRayIntersection(double xCenter, double yCenter, double zCenter, double radius, int xProj, int yProj, double eyeXPos,
out double x, out double z)
{
x = z = 0;
double kx = xProj * PixelWidthInternal - eyeXPos;
double ky = yProj * PixelHeight - eyeYPos;
double kz = DistanceToEyes;
double x0 = xCenter - eyeXPos;
double y0 = yCenter - eyeYPos;
double z0 = zCenter + DistanceToEyes;
double a = kx * kx + ky * ky + kz * kz;
double b = -2 * (kx * x0 + ky * y0 + kz * z0);
double c = x0 * x0 + y0 * y0 + z0 * z0 - radius * radius;
double d = b * b - 4 * a * c;
if (d < 0)
return false;
double t = (-b - Math.Sqrt(d)) / 2 / a;
x = eyeXPos + kx * t;
z = kz * t - DistanceToEyes;
return true;
}