簡體   English   中英

在3D空間中找到一個點到三角形的距離

[英]Finding the distance of a point from a triangle in 3d space

想象一下笛卡爾空間中三角形的表面。 如何找到給定點到該三角形表面的距離?

點1:[30,24,22]
點2:[35、13、19]
點3:[21,29,85]

在這種情況下,點[40、25、77]與上述三角形的表面相距多遠?

或具體地說-確定距離的公式是什么?

這完全取決於您希望距離來自哪里(三角形的哪個部分?)。 如果您知道三角形的起點(也許是中心?),那么從數學的角度來看,公式為:

Point 1: [a1,b1,c1] (point on triangle)
Point 2: [a2,b2,c2] (point to find distance to)

distance vector = [a2-a1, b2-b1, c2-c1]
distance = the magnitude of above = sqrt((a2-a1)^2 + (b2-b1)^2 + (c2-c1)^2))

我不知道C#,但這是它的偽代碼(其背后的數學函數)

編輯 :要找到三角形的中心...

Point 1: [x1, y1, z1]
Point 2: [x2, y2, z2]
Point 3: [x3, y3, z3]
Centre = [(x1+x2+x3)/3, (y1+y2+y3)/3, (z1+z2+z3)/3]

我假設您的意思是最小距離。 否則,距離會根據您在三角形上選擇的點而變化。 要看到這一點,只需在桌上畫一個三角形,然后在其上方握筆。

簡短的答案是,要找到最小距離,您需要構建每列一個點的矩陣,如下所示:

    [ 30 35 21 ]
A = [ 24 13 29 ]
    [ 22 19 85 ]

並閱讀有關預測的詳細信息。 自從您學習這類東西以來已經有一段時間了,請不要害怕。 它不是火箭科學(實際上,也許是火箭科學的入門),但是要了解它需要一些投資。 為了幫助您,我將首先介紹一下該理論,然后再討論實現。

為了給您一些直覺,請握住那支筆。

讓我們從最簡單的情況開始:為了獲得最小的距離,請使筆完全垂直於桌子,筆的末端在三角形的某處。 將您的觀點想象成筆尖。 您剛剛證明三角形中最接近您的點的點就是該點在三角形中三個點所定義的空間上的投影。 換句話說,筆的另一端。 三角形中的任何其他點的距離必須長於筆的長度。

現在,讓我們看一下並發症。 假設所需的點不完全在三角形上方,而是在某處。 說,完全離開桌子表面。 在這種情況下,最接近該點的三角形中的點將是三個點本身之一,或者是連接三個初始點的三個線段上的一個點。

現在開始實現:骨感是,如果您可以使用簡單的線性代數庫,則可以省去很多麻煩。 最困難的步驟是對矩陣求逆,盡管對3x3矩陣求逆通常很容易,但是當點是共線的(即,考慮對齊的三個點),幅值相差很大(即,考慮一個點)時,它會變得復雜。非常長的細三角形),等等。

您可以針對此問題編寫特定於問題的算法,因為它只有3x3,但是到了最后,您將需要求解投影系統,因此您的算法將執行與Wikipedia基本上相同的數學運算頁。 因此,您可能最終會重新發現線性代數,這是浪費大量時間的肯定方法。

我最后的實施建議是在游戲或3D庫中檢查關鍵字“ projection”。 如果幸運的話,您可以調用一個函數。 否則,獲得一些不錯的CLR線性代數庫,構建矩陣,並以大約100行代碼有效地進行整個計算。

暫無
暫無

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

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