簡體   English   中英

確定直線在3D空間中與三角形相交的位置

[英]Determining where / if line intersects triangle in 3D space

問題

所以基本上我有一堆由3個點定義的三角形:

X0, Y0, Z0
X1, Y1, Z1
X2, Y2, Z2

我有兩條要點:

Xl0, Yl0, Zl0
Xl1, Yl1, Zl1

我有一個空間點(P)定義為:

Xp0, Yp0, Zp0

在此處輸入圖片說明

我想首先知道如何確定與原始線平行但經過新點P的線的方程式?

其次,使用該新線,如何確定三角形上是否相交?

我想嘗試創建一個函數,該函數接受我已經呈現的輸入,並輸出一個點,該點是三角形和布爾值的交集(如果確實相交)。

現在,我想通過c#或VB .NET進行此操作,但是實際的解決方案實際上只是基於數學的,因此用數學而不是代碼表示的答案肯定也會有所幫助。

我嘗試過的

我以為計算新線將僅僅是新點和第二點,

Xnew = Xl0 + (Xp0 - Xl1)
Ynew = Yl0 + (Yp0 - Yp1)
Znew = Zl0 + (Zp0 - Zp1)

然后繪制從(Xnew,Ynew,Znew)到(Xp0,Yp0,Zp0)的新線應該與我的第一條線平行,但是這樣做並不平行,這意味着我的計算是錯誤的。

任何幫助將不勝感激!

更新資料

在嘗試了以下建議之后,繪制的線條似乎還不正確:

在此處輸入圖片說明

相機到原點的位置就是創建第一行的原因。 我們確定的第二條線是從光標位置到新計算點的線,該點應與從原點到相機的線平行,如您所見,並非如此。 我的思考過程是否錯誤或編碼不正確?

我的代碼進行計算,如下所示:

GL.Begin(PrimitiveType.Lines)
    GL.Color3(Color.Orange)

    Dim XL0, YL0, ZL0 As Single
    XL0 = 0
    YL0 = 0
    ZL0 = 0

    'origin is at 0,0,0

    Dim XL1, YL1, ZL1 As Single
    XL1 = camx
    YL1 = camy
    ZL1 = camz

    Dim XS, YS, ZS As Single

    XS = XL1 - XL0
    YS = YL1 - YL0
    ZS = ZL1 - ZL0

    Dim length As Single = Sqrt(XS * XS + YS * YS + ZS * ZS)

    XS /= length
    YS /= length
    ZS /= length

    Dim XPN, YPN, ZPN As Single

    XPN = returnvec.X - XS * length
    YPN = returnvec.Y - YS * length
    ZPN = returnvec.Z - ZS * length


    GL.Vertex3(XPN, YPN, ZPN)
    GL.Vertex3(returnvec.X, returnvec.Y, returnvec.Z)
    GL.End()

在此處輸入圖片說明

試驗1

在此處輸入圖片說明

試用2

我想首先知道如何確定與原始線平行但經過新點P的線的方程式?

要獲得直線的斜率:

XS = XL1 - XL0;
YS = YL1 - YL0;
ZS = ZL1 - ZL0;
// Find length of new slope
length = Math.Sqrt(XS * XS + YS * YS + ZS * ZS);
// Normalize the new slope
XS /= length;
YS /= length;
ZS /= length;

現在XS是一個Vector3 ,它基本上代表您的線的斜率,您可以對另一條線做同樣的操作,並且可以通過將該斜率與該線進行比較,以及對這條線進行反向傾斜進行測試。

現在,如果您要用此斜率創建一條新線,並從點Plength找到點N ,我們可以這樣做:

XPN = XPP + XS * length;
YPN = YPP + YS * length;
ZPN = ZPP + ZS * length;

我畫了線,它們確實是平行的。 我認為正在發生的事情是,由於我以直線視圖查看該線,因此它似乎向內收斂。 這意味着我創建平行線的數學是正確的,從技術上講這是我的問題。 但是,平行線不是我需要進行射線投射的東西。

暫無
暫無

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

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