public VectorND ProjectTo2D( double cameraDist )
{
double denominator = cameraDist - X[2];
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,
0, 0 } );
return result;
}