2013-12-18 116 views
1

我需要找到一個算法,使用兩個3D網格(一組點和三角形)檢查是否有可能找到一個矩陣4x4,它將第一個變換爲第二個。 矩陣可以包含比例,旋轉和平移,並且點的順序和三角形的順序不能相同。比較兩個3Dmesh

有人已經找到關於這個問題的論文/文章/學術研究?

+1

您可以使用[ICP](http://en.wikipedia.org/wiki/Iterative_closest_point)的變體。要引入縮放,可以將兩個模型重新縮放到單位邊界球。在彼此擬合點之後,您必須檢查三角形。 –

回答

1

我鑫卡特關於這個問題,我制定了這個算法: 比較2目01和02

  1. 移動的兩個中心原點,現在我們有T1申請O1和T2適用於O2(我更喜歡這種方式,而不是隻移動一個物體)
  2. 將距離d1和d2的網格F1和F2的距離設置爲更遠,並將O2的比例設置爲s2 = d1/d2,現在2個物體具有相同的尺寸
  3. 創建一個旋轉(使用lookat算法),使F2與F1重合。
  4. 取O1中的點P1作爲從他與F1的距離df1和他距離原點fp(它是一個圓,因爲它是2個球的交點)中定義的圓中唯一的點
  5. 在O2中找到一個點P2與原點和F2(現在與F1重合)具有相同的距離,如果這個點不存在,那麼這兩個對象是不同的。
  6. 創建沿着軸線原點-F2,使P2重合P1
  7. 的旋轉,如果在O1每個點有轉化在O2點在於具有在O2以及用於在O1每個三角形有相同的位置一個三角形在O2的相同位置轉換成

    然後2個網格是相同的。

    否則2個網格是不同的。

+0

不錯而簡單的算法:) – Kromster

+1

好的一個。但請注意這種算法的侷限性。可能有多於一個最遠的頂點(例如,對於球體或圓環)。這同樣適用於P1的選擇。距離df1和fp的距離可能沒有意義。例如。對於圓錐體來說,如果尖端是最遠頂點並且其軸線穿過原點。然後所有其他頂點與尖端和原點的距離相同。 –

+0

另一個問題是,由於存儲和處理方式的不同,浮點值與某些容差相比(例如4.9999876和5.0000142可能相同) – Kromster