2016-03-03 52 views
1

我有一個多邊形,它由一系列頂點(它們是R^3中的向量)和三角形面(由三個頂點的映射定義)組成定義臉部。找到一組多邊形的邊,沒有重複

作爲一個例子,這裏爲V和F

V=[-0.8379 0.1526 -0.0429; 
    -0.6595 -0.3555 0.0664; 
    -0.6066 0.3035 0.2454; 
    -0.1323 -0.3591 0.1816; 
    0.1148 -0.5169 0.0972; 
    0.2875 -0.2619 -0.3980; 
    0.2995 0.4483 0.2802; 
    0.5233 0.2003 -0.3184; 
    0.5382 -0.3219 0.2870; 
    0.7498 0.1377 0.1593] 

F=[2  3  1; 
    7  3  4; 
    3  2  4; 
    7  9 10; 
    10  8  7; 
    9  5  6; 
    9  8 10; 
    1  6  2; 
    7  8  1; 
    2  6  5; 
    8  9  6; 
    5  9  4; 
    9  7  4; 
    4  2  5; 
    7  1  3; 
    6  1  8] 

Euler's formula給面子,邊緣之間的關係,和頂點

V-E+F = 2 

我試圖找到一套獨特的邊緣頂點的多面體。我已經可以找到每個面的所有邊(每面3個邊和每邊是兩個相鄰面的構件)通過執行以下操作

Fa = F(:,1); 
Fb = F(:,2); 
Fc = F(:,3); 


e1=V(Fb,:)-V(Fa,:); 
e2=V(Fc,:)-V(Fb,:); 
e3=V(Fa,:)-V(Fc,:); 

然而,該發現對於每個面的所有邊,並且包括重複。面A上的邊e_i也是面B上的-e_i。

任何人都有一個很好的方法來找到唯一的一組邊(正方向和負方向),或確定e1,e2,e3內的映射將積極的優勢與負面聯繫起來?

回答

0

最好使用與編碼面相同的方式編碼的邊:例如,[3 7]是頂點3和7之間的邊。從此表示法中,您可以通過減去那些頂點。

這裏是一個行命令是F獲得一套獨特的邊緣:

E = unique(sort([F(:,[1,2]); F(:,[1,3]); F(:,[2,3])], 2), 'rows'); 

排序的第一個參數是有兩列持所有邊緣,與重複的矩陣。然後它被排序,以便行7 3變成3 7。最後,unique僅返回唯一行。輸出:

1  2 
1  3 
1  6 
1  7 
1  8 
2  3 
2  4 
2  5 
2  6 
3  4 
3  7 
4  5 
4  7 
4  9 
5  6 
5  9 
6  8 
6  9 
7  8 
7  9 
7 10 
8  9 
8 10 
9 10 

然後,您可以得到協調邊緣的形式coords = V(E(:,1))-V(E(:,2))

+0

只是想最後感謝你的偉大的建議。 直到現在,超過1.5年後,我纔開始看到您的方法的效率。 我很感激幫助。 – shanksk