2013-04-01 45 views
2

我查看了python-graph和boost圖形庫的python綁定,但沒有發現任何與網格的雙重化有關的東西(對偶的頂點是原始圖的面,並且通過邊如果它們在原始圖中共享邊,則爲雙)。在我開始重新發明這個輪子之前,有沒有可能忽視的實現?是否有能夠計算3D網格對偶的Python庫?

回答

2

可能有,但實現它很簡單。要做到這一點,需要找到使用它的三角形的邊緣。有了這些信息,就可以構建三角形之間的連接。

簡單的Python實現,三角形(或多邊形)爲頂點索引列表和邊緣有序對頂點指數:

from collections import defaultdict 
from itertools import combinations 
triangles = [(1,2,3), (2,3,4), (1,3,5), (3,4,5), (5,6,7), (4,5,6)] 
# For each edge set triangles containing that edge 
edge2trias = defaultdict(list) # edge (v1,v2) -> list of triangles 
for t_ind, ps in enumerate(triangles): 
    for edge in zip(ps, ps[1:]+ps[:1]): 
     edge2trias[tuple(sorted(edge))].append(t_ind) 
# For each edge, set pair(s) of neighbouring triangles 
tria2neigh = defaultdict(list) # triangle index -> list of neighbouring triangles 
for edge, trias in edge2trias.iteritems(): 
    for t1, t2 in combinations(trias, 2): 
     tria2neigh[t1].append(t2) 
     tria2neigh[t2].append(t1) 
+0

是的,結束了一個非常類似的實現。 –

相關問題