3D Line-Plane Intersection

后端 未结 8 1915
-上瘾入骨i
-上瘾入骨i 2020-11-29 21:51

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 th

8条回答
  •  栀梦
    栀梦 (楼主)
    2020-11-29 22:18

    If you have two points p and q that define a line, and a plane in the general cartesian form ax+by+cz+d = 0, you can use the parametric method.

    If you needed this for coding purposes, here's a javascript snippet:

    /**
    * findLinePlaneIntersectionCoords (to avoid requiring unnecessary instantiation)
    * Given points p with px py pz and q that define a line, and the plane
    * of formula ax+by+cz+d = 0, returns the intersection point or null if none.
    */
    function findLinePlaneIntersectionCoords(px, py, pz, qx, qy, qz, a, b, c, d) {
        var tDenom = a*(qx-px) + b*(qy-py) + c*(qz-pz);
        if (tDenom == 0) return null;
    
        var t = - ( a*px + b*py + c*pz + d ) / tDenom;
    
        return {
            x: (px+t*(qx-px)),
            y: (py+t*(qy-py)),
            z: (pz+t*(qz-pz))
        };
    }
    
    // Example (plane at y = 10  and perpendicular line from the origin)
    console.log(JSON.stringify(findLinePlaneIntersectionCoords(0,0,0,0,1,0,0,1,0,-10)));
    
    // Example (no intersection, plane and line are parallel)
    console.log(JSON.stringify(findLinePlaneIntersectionCoords(0,0,0,0,0,1,0,1,0,-10)));

提交回复
热议问题