A 求空间直线与平面的交点
若直线不与平面平行,将存在交点。如下图所示,已知直线L过点m(m1,m2,m3),且方向向量为VL(v1,v2,v3),平面P过点n(n1,n2,n3),且法线方向向量为VP(vp1,vp2,vp3),求得直线与平面的交点O的坐标(x,y,z):
将直线方程写成参数方程形式,即有:
x = m1+ v1 * t
y = m2+ v2 * t
z = m3+ v3 * t
将平面方程写成点法式方程形式,即有:
vp1 * (x – n1) + vp2 * (y – n2) + vp3 * (z – n3) = 0
则直线与平面的交点一定满足式(1)和(2),联立两式,求得:
t = ((n1 – m1)*vp1+(n2 – m2)*vp2+(n3 – m3)*vp3) / (vp1* v1+ vp2* v2+ vp3* v3)
如果(3)式中分母(vp1* v1+ vp2* v2+ vp3* v3)为0,则表示直线与平面平行,即直线与平面没有交点。
否则求解出t后,然后将t代入式(1)即可求得交点O的坐标(x,y,z)。
B 求空间中直线与一个与一个平面的交点并判断交点是否在某个三角形区域内部
设三角形的三个顶点分别为ABC,需要判断的点为P。这里有几种方法来进行判断:
方法1:用面积来判断。
点P与三角形三边的组成个了三个三角形:PAB,PAC,PBC。判断它们的面积之和是否与ABC的面积相等。如果相等则需要判断的点在三角形区域内部,否则就在三角形区域外部。
方法2:用角度来判断。
角APB,BPC,CPA之和是否等于360度,如果等于则需要判断的点在三角形区域内部,否则就在三角形区域外部。
方法3:用向量积来判断。
沿 △ABC 各有向边按一定方向走(顺时针或逆时针),判断点 P 是否在该边的某侧(右侧或左侧),若点 P 在三条边的同侧,则点 P 在 △ABC 内。沿 △ABC 各有向边按一定方向走(顺时针或逆时针),判断点 P 是否在该边的某侧(右侧或左侧),若点 P 在三条边的同侧,则点 P 在 △ABC 内。
用方法1来求三角形面积如下:
B x C
=
它的模一半即为所要求的三角形面积S。
计算三角形面积代码实现如下:
float triangleArea(Point *
{
}
判断空间中一个点是否在一个三角形区域内部 : tA, tB, tC为三角形三个顶点
{
}