直線と平面の交点を計算するJavaScriptスクリプトコード


直線点m(x m、y m、zhum)をすでに知っていて、その方向ベクトルはV_です.l(vl x) vluy vl z.
平面過点n(xxxun,y n,zhun)法線方向はV_p(vpux) vpuy vp z.
直線のパラメータ方程式は
x=x_m+vl_x*t 
y=y_m+vl_y*t 
z=z_m+vl_z*t 
平面方程式は以下の通りです
vp_x*(x-x_n)+vp_y*(x-x_n)+ vp_z*(x-x_n) = 0
直線パラメータ方程式と平面方程式を連立して解いた.
t=((x n-x m)*vp x+(y n-y m)*vp y+(z n-z m)*vp z) 
//(vpux*vlux + vpuy*vluy+vpuz*vluz) 
tを直線方程式に持ち込むと交点座標が得られます.  
//
//
//            JavaScript      
//    http://blog.csdn.net/abcjennifer/article/details/6688080
//

function CalPlaneLineIntersectPoint( planeVector,  planePoint,  lineVector,  linePoint)  
{  
    var returnResult = Array();  
    var vp1, vp2, vp3, n1, n2, n3, v1, v2, v3, m1, m2, m3, t,vpt;  
    vp1 = planeVector[0];  
    vp2 = planeVector[1];  
    vp3 = planeVector[2];  
    n1 = planePoint[0];  
    n2 = planePoint[1];  
    n3 = planePoint[2];  
    v1 = lineVector[0];  
    v2 = lineVector[1];  
    v3 = lineVector[2];  
    m1 = linePoint[0];  
    m2 = linePoint[1];  
    m3 = linePoint[2];  
    vpt = v1 * vp1 + v2 * vp2 + v3 * vp3;  
    //               
    if (vpt == 0)  
    {  
        return  returnResult  ;  
    }  
    else  
    {  
        t = ((n1 - m1) * vp1 + (n2 - m2) * vp2 + (n3 - m3) * vp3) / vpt;  
        returnResult[0] = m1 + v1 * t;  
        returnResult[1] = m2 + v2 * t;  
        returnResult[2] = m3 + v3 * t;  
    }  
    return returnResult;  
}