2011-01-10 68 views
5

Greetings,檢測任意形狀

我們有一組點代表3D物體與水平面的交點。我們希望檢測代表身體橫截面的2D形狀。可以有一個或多個這樣的形狀。我們發現,討論如何利用Hough變換圖像進行操作的文章,但我們可能有成千上萬這樣的點,所以轉換成圖像是非常浪費的。有沒有更簡單的方法來做到這一點?

謝謝

+0

你說的是任何類型的三維形狀,還是有一些應用或特定領域的限制? – 2011-01-10 12:32:24

回答

5

在您的3D模型轉換爲一組點,你已經扔掉找到交集的形狀所需的信息。步行3D模型的邊緣連通圖,按順序查找邊緣平面交點。

假設你有,或可以構建,3D模型地形(一些數目的頂點的,由邊緣結合的頂點,面之間的邊緣):

  1. 迭代通過邊緣列表,直到找到一個相交的測試平面,將其添加到列表
  2. 接共享此邊緣
  3. 迭代通過該面的另一邊緣,以尋找下一個交叉點的面中的一個,將它添加到列表
  4. 重複用於另一面那個邊緣分享,直到你回來了t時的起始邊緣

你已經建立了交叉的平面邊緣的有序列表 - 這是微不足道的線性插值每個邊找到交叉點,從而,形成了路口形狀。請注意,這個過程假定臉部多邊形是凸面的,這是你的情況。 如果卷是凹的,你將有多個分立路口形狀,所以你需要,直至所有邊緣都被檢查,重複這個過程。

有做這個here一些Java代碼,以及一個相當漂亮的測試應用here

控制:

  • 1-5改變測試體積
  • q和w以改變查詢飛機
  • A,S,和d的數量來改變所述查詢的掃描速度飛機
  • 左鍵單擊拖動旋轉視圖
  • 右鍵單擊並拖動旋轉查詢飛機
0

從接受答案的算法/代碼不復雜的特殊情況下工作,當平面相交的凹面的一些頂點。在這種情況下「走」邊面的連接圖貪婪可能時間之前關閉一些多邊形。

會發生什麼情況是,因爲平面與頂點相交,所以在走圖的一個點上,下一個邊有兩種可能性,並且選擇哪一個是重要的。

一種可能的解決方案是實現一個圖的遍歷算法(例如深度優先搜索),並選擇其中包含起始邊緣的最長循環。