3dlineintersectionplane

3D Line-Plane Intersection


If given a line (represented by either a vector or two points on the line) how do I find the point at which the line intersects a plane? I've found loads of resources on this but I can't understand the equations there (they don't seem to be standard algebraic). I would like an equation (no matter how long) that can be interpreted by a standard programming language (I'm using Java).


Solution

  • Here is a method in Java that finds the intersection between a line and a plane. There are vector methods that aren't included but their functions are pretty self explanatory.

    /**
    * Determines the point of intersection between a plane defined by a point and a normal vector and a line defined by a point and a direction vector.
    *
    * @param planePoint    A point on the plane.
    * @param planeNormal   The normal vector of the plane.
    * @param linePoint     A point on the line.
    * @param lineDirection The direction vector of the line.
    * @return The point of intersection between the line and the plane, null if the line is parallel to the plane.
    */
    public static Vector lineIntersection(Vector planePoint, Vector planeNormal, Vector linePoint, Vector lineDirection) {
       if (planeNormal.dot(lineDirection.normalize()) == 0) {
           return null;
       }
           
       double t = (planeNormal.dot(planePoint) - planeNormal.dot(linePoint)) / planeNormal.dot(lineDirection.normalize());
       return linePoint.plus(lineDirection.normalize().scale(t));
    }