2010-09-16 111 views
4

對於我正在研究的3D遊戲引擎,我需要計算兩個三角形是否在同一平面上以便相應地顯示它。如何計算三維空間中三角形的角度?計算兩個三角形是否在同一平面上

會計算表面法線和比較這些給我2當量法線?

+0

您能否簡要介紹一下您試圖實現的渲染效果? – tibur 2010-09-16 13:50:52

+0

同一平面上的任何三角形都將渲染爲一個平面填充,因此我將計算哪些三角形可以合併爲多邊形(一次),然後渲染它們以繪製一個形狀(每個渲染) – 2010-09-16 16:09:43

回答

3

爲什麼你想這樣做?你期望測試的三角形的數量是多少?實時渲染算法似乎有點複雜!

反正:

計算三角形的正常n。然後計算平面方程: a.x + b.y + c.z + d = 0(a,b,c)是你的三角法線和d = - dot(n,P)(P是你的三角形頂點之一)。對第二個三角形做同樣的事情。

如果四個值abcd等於或相反(全部一起),則兩個平面相同。

+0

這對於所有可能的四捨五入非常敏感錯誤。 – 2010-09-16 12:21:21

+2

@Jenko「發送給我teh codez」是因爲你不是數學專家?坦率地說,如果你正在編寫3D引擎,你應該對用於創建引擎的數學有所瞭解。否則,你只是複製和粘貼其他解決方案而不知道他們是否真正解決了你想要完成的任務。 – 2010-09-16 20:58:30

+2

如果您被*矢量*或*矩陣*這個詞嚇倒了,您至少應該閱讀一些3D數學教程,或者您將不會成功編寫3D引擎。 http://chortle.ccsu.edu/VectorLessons/vectorIndex.html – tibur 2010-09-17 07:23:21

2

你問的是不可能的數字。舍入誤差會使這樣的測試完全無關緊要。

但是,您可能想要測試「如果兩個三角形在同一平面上,在一定的容差範圍內」。這是很難做到的,在這裏,舍入誤差也可能會混淆任何可能的方法。事實上,每當三角形很薄時,他們所住的飛機就會有很大的不安。

如果你真的想要的話,我可以指給你一些文獻(你最好打賭是看看CGAL庫,看他們是否實現了與你的問題相關的東西)。任何事情都可能涉及任意的精確浮點,巧妙的操作重新排序,並且無論如何都會導致不準確的結果。

因此,我強烈建議您爲您的實際問題找到另一種方法。

如果您嘗試計算通過三點的平面方程,然後測試其他三點,則舍入誤差是一個(巨大的)問題。還有另一種解決方案。

你可能想要計算你的6個點的inertia matrix,對它進行對角化,看它的最小特徵值是否在另外兩個點的某個微小值內。這意味着你的六點實際上位於同一架飛機上,在一個容差範圍內。

+0

這大致相當於主成分分析嗎? – tibur 2010-09-17 07:28:11

+0

@tibur:它*是一個主成分分析 – 2010-09-17 09:20:35