我正在寻找一个概念来存储(在3维欧几里德空间中)面,边和顶点,以便
定义
我考虑过半边数据结构,但只有当所有连接面具有相同的绕组时,查询才真正起作用。
例如,考虑使用此伪代码来访问此类相关实体:
face.neighbors #the neighboring faces
face.edges #the edges shared by this face (in the right winding order)
face.verts #the vertex of that face (in the right winding order)
edge.v1, edge.v2 #the two vertex making up an edge
vertex.edges #the edges this vertex shares
vertex.neighbors # the neighbors of this vertex along each shared edge
答案 0 :(得分:2)
我会看一下计算几何算法库CGAL。您可以直接使用某些内容,或者至少获得一些好主意。半边听起来像个好主意;在我看来,你应该尽可能强制统一缠绕。然而,听起来你对此并不感兴趣。
一个想法可能是在面部的数据结构中保留一对(每个绕组一个元素);这可能会给你足够的灵活性,在它上面实现某种类似半边缘的数据结构,效率很高。
答案 1 :(得分:1)
我建议你也看看OpenMesh。它在C ++模板方面也很重,就像CGAL一样。
答案 2 :(得分:0)
如果你不想被限制在歧管表面,那么现在就是翼刃。如果“关于关系的数据”确实是你的首要任务,那么我猜你运气不好。
答案 3 :(得分:0)
我找到了一个关于3d网格数据结构的摘要。 http://wscg.zcu.cz/wscg2006/Papers_2006/Short/E17-full.pdf
答案 4 :(得分:-2)