3

完成二維三角測量之後,一些三角形具有相同的顏色,我想重新組合它們以繪製成類似顏色的圖形路徑。我發現,如果我只是逐個繪製三角形,則某些圖形渲染器會顯示三角形之間的接縫(至少在涉及到抗鋸齒和/或透明度的情況下)。多邊形三角測量的相反之處是什麼?

那麼如何取一組(不重疊的)三角形並生成一個圖形路徑,其中可能包含空洞和不相交的多邊形?

盲目地將三角形添加到圖形路徑中實際上對於填充效果非常好(當然不適用於撫摸),但是導出這些額外的內部點並不合適。

+1

刪除所有出現多次的邊緣? (其中邊緣由它連接的兩個點定義) – 2010-08-28 16:11:49

+0

不是一個糟糕的開始,但仍然存在將剩餘邊轉換爲路徑的問題,這對於觸摸多邊形來說並不是微不足道的,然後找出哪些是漏洞其他。我希望有一個這種操作的名稱和一個可處理部分共享邊的通用算法。 – xan 2010-08-28 18:15:45

回答

6

將每個三角形想象成一個由三個向量構成的輪廓,這三個向量位於逆時針鏈中。

<--^ 
|/
|/ 
V 

因此,對於形狀中的所有三角形,取其輪廓矢量的聯合。如果聯合中的兩個輪廓矢量是相同的,但方向相反,則它們相互抵消並從聯合中移除。

例如,對於兩個三角形是並排的聯合是6個矢量

<--^^ 
| //| 
|// | 
VV--> 

因爲在中間的兩個對角矢量取消,因爲它們是相同的,但是在相反方向上運行,這減少至4個矢量:

<--^ 
| | 
| | 
V--> 

您會發現此作品適用於較大的三角形聚合。只需連接結果矢量尾部即可獲得封閉路徑。一些封閉的路徑可能會順時針運行,而這些都是空洞。

<-----<-----<-----^ 
|     | 
|     | 
V  ^-----> ^
|  |  |  | 
|  |  |  | 
V  <-----V ^
|     | 
|     | 
V----->----->-----> 
+0

謝謝,我沒有想到給邊緣指定方向。漂亮的圖表。 – xan 2010-08-30 11:38:59