You need to enable JavaScript to run this app. 如何将Delaunay三角剖分结果转换为多种边数据结构并对比存储空间
优惠活动
大模型
产品
解决方案
定价
更多

如何将Delaunay三角剖分结果转换为多种边数据结构并对比存储空间

Delaunay三角剖分实现代码
import numpy as np
import matplotlib.pyplot as plt
from scipy.spatial import Delaunay

points = np.array([[0.2, 0], [0.1, 1.1], [0.6, 0.1], [1, 0.5], [0.6,0.9], [0.4,0.4]])
tri = Delaunay(points)

#plot
plt.triplot(points[:,0], points[:,1], tri.simplices)
plt.plot(points[:,0], points[:,1], 'o')
plt.show()

print(tri.points)
"""
[[0.2 0. ]
[0.  1.1]
[0.6 0. ]
[1.  1. ]
[0.2 0.8]
[0.4 0.4]]
"""
print(tri.simplices)
"""
[[0 5 1]
[5 4 1]
[4 5 3]
[5 2 3]
[2 5 0]]
"""

Delaunay

问题说明

上述代码对输入点集完成了Delaunay三角剖分,输出得到点集数组tri.points和三角面片索引数组tri.simplices。需要将这两个输出分别转换为半边数据结构(half-edge data structure)、翼边数据结构(winged-edge data structure)、角表数据结构(corner table data structure)、*四边形边数据结构(quad edge data structures)*四种不同的网格表示形式,同时对比哪种结构的存储空间占用更低。需要确认Python生态中是否有支持此类转换的第三方库,还是需要完全自行编码实现。

解答
  • 可用的现成第三方库如下:
    1. trimesh:是Python生态中最常用的三角网格处理库之一,原生支持半边数据结构。你可以直接将scipy输出的点和面片数组传入trimesh.Trimesh(vertices=tri.points, faces=tri.simplices),生成的对象内置edges、halfedges等属性,可直接获取半边结构相关数据,也可以基于它提供的接口二次扩展得到翼边、角表、四边形边结构。
    2. pymesh:内置了半边、四边形边等结构的实现,不过安装门槛比trimesh高,部分环境下依赖配置比较麻烦。
    3. meshio:主要用于不同网格格式的读写,本身不直接内置这四种结构的封装,但可以基于它读取的点面数据快速做转换。
  • 仍需自行编码的部分:
    目前没有库能直接同时输出四种标准结构的完整定义,如果你需要严格复现四种结构的标准定义、做精确的存储空间对比,部分逻辑需要自行补充:
    • 翼边结构需要额外存储每条边的左右面、左右端点对应的前后边关联信息,trimesh没有直接打包好的翼边结构,需要基于半边数据做映射转换。
    • 角表结构的存储逻辑最简单,仅需存储顶点、面片、每个角对应的对角角索引,可直接基于scipy输出的面片数组遍历生成,不需要额外依赖。
    • 四边形边结构专门用于处理流形网格的拓扑,如果你处理的都是三角剖分的流形网格,可以基于trimesh的半边结构配对生成,否则需要自行处理非流形的边界情况。
  • 存储空间对比结论:
    同一张三角网格下,存储空间占用从低到高排序通常是:角表结构 < 半边结构 < 翼边结构 < 四边形边结构,具体占用大小和你存储每个属性的数据类型(比如用int32还是int64存索引)强相关。

内容的提问来源于stack exchange,提问作者Lyrk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 16:48:01