private bool GetPlaneRayIntersection(int xProj, int yProj, double eyeXPos, double a, double b, double c, double d, out double x, out double z, CheckPoint checkPoint)
{
x = z = 0;
double dx = xProj * PixelWidthInternal - eyeXPos;
double dy = yProj * PixelHeight - eyeYPos;
double dz = DistanceToEyes;
double t;
if (!MathHelper.Divide(-(a * eyeXPos + b * eyeYPos - c * DistanceToEyes + d), a * dx + b * dy + c * dz, out t))
return false;
x = eyeXPos + t * dx;
z = -DistanceToEyes + t * dz;
return checkPoint != null ? checkPoint(x, eyeYPos + t * dy, z) : true;
}