我有一个普通的已知四个坐标和一个有两个已知坐标的线,如图所示。
飞机的四个坐标是
A = (-5 -5 -8)
B = ( 15 15 -8)
C = ( 15 15 12)
D = ( -5 -5 12)
行的坐标是
M = (1.3978,40,6.1149)
N = 4.3943, 4.8078,0.3551)
在这种情况下,线和平面相交,那么如何使用MATLAB在3D空间中找到直线和平面的交点? 或者如何检查两者是否相交?
我试图通过视频tutorial to find equation of plane from three points和tutorial for finding point where line intersects a plain
找到解决方案但就我而言,平面方程为零。所以我很困惑。任何人都可以帮助我吗?
提前致谢, 马努
答案 0 :(得分:1)
我会使用简单的线性代数来找到交点。
让n
垂直于普通(您可以将其计算为说N = cross(AB, AD)
的向量积,然后单位n = N / |N|
,其中|N| = sqrt(dot(N, N))
是向量N的长度。
你可以使用matlabcentral中的以下功能来涵盖所有角落情况(例如当线与平面平行时)并在评论中描述它们。
评论示例:
A =[ -6.8756 39.9090 10.0000],B =[ -6.0096 40.4090 10.0000],C =[ -6.0096 40.4090 11.0000],D=[ -6.8756 39.9090 11.0000];
P0 =[ 1.3978 40.0000 6.1149],P1 =[ 4.3943 -4.8078 0.3551];
我不知道你犯了哪个错误,但我很确定你的分段之外还有一个交叉点。所以你应该得到check=3
。以下是逐步操作的输出:
>> AB = B-A
AB = 0.8660 0.5000 0
>> AD = D-A
AD = 0 0 1
>> n = cross(AB,AD)/sqrt(dot(cross(AB,AD),cross(AB,AD)))
n = 0.5000 -0.8660 0
>> [I,check]=plane_line_intersect(n,A,P0,P1)
I = 1.0961 44.5116 6.6948
check = 3
它与传入的任何其他点(B,C或D)产生相同的结果。check=3
表示存在交叉点I,它位于P01段之外。
作为验证步骤,请注意法线n具有Nz = 0
,这意味着它与Z轴垂直。线与其不相交的唯一方法是它是否与Z轴平行(因此矢量P01将平行于Z并且具有零Z分量)。
您的P01未与Z对齐:
>> P01 = P1 - P0
P01 = 2.9965 -44.8078 -5.7598