簡體   English   中英

如何使用MATLAB在3D空間中找到平面中直線的交點

[英]How to find intersection point of a line in a plane in 3D space using MATLAB

如圖所示,我有一個已知的四個坐標的平原和一條有兩個已知的坐標的直線。 在此處輸入圖片說明

平面的四個坐標是

 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空間中直線與平面的交點? 或如何檢查兩者是否相交?

我試圖通過以下視頻教程來找到解決方案,該視頻教程從三個點中查找平面方程, 教程中找到線與平面相交的點

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

在此先感謝Manu

我將使用簡單的線性代數來找到交點。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM