如何使用MATLAB

时间:2017-09-29 02:54:40

标签: matlab line cartesian-coordinates

我有一个普通的已知四个坐标和一个有两个已知坐标的线,如图所示。 enter image description here

飞机的四个坐标是

 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 pointstutorial for finding point where line intersects a plain

找到解决方案

但就我而言,平面方程为零。所以我很困惑。任何人都可以帮助我吗?

提前致谢, 马努

1 个答案:

答案 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