2017-09-29 138 views
0

我有一個帶有已知四個座標的平面和一個帶有兩個已知座標的線,如圖所示。 enter image description here如何使用MATLAB在3D空間中找到平面中的一條線的交點

四個平面座標是

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,三維空間中的線和麪的交點? 或我如何檢查兩者是否相交?

我曾嘗試通過下面的視頻tutorial to find equation of plane from three pointstutorial for finding point where line intersects a plain

但在我的情況下找到解決方案,平面的方程是零。所以我很困惑。誰能幫我?

由於提前, 馬努

回答

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 
+0

非常感謝你的回覆 – manoos

+0

當我檢查的平面上的點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 = 1和I = [-21.2205 31.6268 -6.3689]。其實沒有相交。你能解釋一下,爲什麼會這樣? – manoos

+0

您只需要3個點來定義平面,4個點可能不是共面的。你的是,所以這不是問題。但是,我無法重現您的輸出結果,我對我來說看起來很合理。請看看我輸入的輸出結果。希望你會發現一個錯誤。 –

相關問題