AutoStereogramDemo.AutoStereogramBuilder.GetSphereRayIntersection C# (CSharp) Method

GetSphereRayIntersection() private method

private GetSphereRayIntersection ( double xCenter, double yCenter, double zCenter, double radius, int xProj, int yProj, double eyeXPos, double &x, double &z ) : bool
xCenter double
yCenter double
zCenter double
radius double
xProj int
yProj int
eyeXPos double
x double
z double
return bool
        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;
        }