*ax + by + cz + d = 0*. For convenience, we can represent this also as

where

*n = (a, b, c)*and

*r = (x, y, z)*is a point on the plane.

We take a line through two points,

*A*and

*B*, in vector form as

*L(t) = A + (B–A)t*

*We want to find the intersection of the line with the plane. That is, we need*

*f*, such that

Then,

And so

The desired point is

*L(f)*, since it on the plane and on the line.

Notice that the calculation of

*f*requires only the evaluation of the general equation of the plane using

*A*and

*B*as the points. The results will not be zero unless

*A*and

*B*are on the plane, in which case we would already have the result. If the line is parallel with the plane, then the denominator will be zero giving an indeterminate result. This fits with the geometric interpretation of the plane evaluation. The point of the last step in our derivation is that it simplifies the coding of the problem somewhat by reducing it to two plane evaluations. (If you observe carefully, you will see it makes the difference not of two additions but only of one.)

Evaluating the equation of a plane using a point not on the plane gives a result which is proportional to the distance between the planes. If the normal vector (

*n = (a, b, c)*), has a magnitude of 1, then it yields the distance. However, in the formula we have derived, we have not depended on the equation of the plane being normalized. The constant of proportionality in the numerator cancels with itself in the denominator (I mean "behind the scenes" or if you derived it using a different approach) to produce the simple result for

*f*above.

The idea for this solution came from initially viewing it as a linear interpolation problem, which, of course, it is. Similar triangles also are an acceptable approach the problem, though it may be more difficult to deal with the signs. The above derivation deals with sign transparently.