直線と平面の交点を計算するJavaScriptスクリプトコード
1440 ワード
直線点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を直線方程式に持ち込むと交点座標が得られます.
平面過点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;
}