public VectorND ProjectTo3D( double cameraDist )
{
double denominator = cameraDist - X[3];
if( Tolerance.Zero( denominator ) )
denominator = 0;
// Make points with a negative denominator invalid.
if( denominator < 0 )
denominator = 0;
VectorND result = new VectorND( new double[] {
X[0] * cameraDist / denominator,
X[1] * cameraDist / denominator,
X[2] * cameraDist / denominator, 0 });
return result;
}