有没有能够计算3D网格对偶的python库?

时间:2013-04-01 15:33:51

标签: python graph mesh graph-tool

我查看了python-graph和boost图库的python绑定,但没有发现任何关于网格双重化的相关信息(双重顶点是原始图形的面,并通过边连接在双重中,如果他们在原始图中共享边缘)。在我重新发明这个轮子之前,是否有一个我可能忽略的实现?

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:1)

回答自己的问题 - graph-tool's line graph function计算图表的对偶性。