|
bool CalPlaneLineIntersectPoint(float *planeNVector, float *planePoint, float *lineVector, float *linePoint,
float &resultx,float &resulty,float &resultz)
{
float vp1, vp2, vp3, n1, n2, n3, v1, v2, v3, m1, m2, m3, t,vpt;
vp1 = planeNVector[0];
vp2 = planeNVector[1];
vp3 = planeNVector[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 false;
}
else
{
t = ((n1 - m1) * vp1 + (n2 - m2) * vp2 + (n3 - m3) * vp3) / vpt;
resultx = m1 + v1 * t;
resulty = m2 + v2 * t;
resultz = m3 + v3 * t;
}
//
return true;
}
|
|