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