You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scipy Delaunay未为所有点生成面,如何获取全部三角面?

问题原因与解决方案

核心问题

你用scipy.spatial.Delaunay处理3D点时,默认执行的是三维Delaunay三角剖分,生成的是四面体(4顶点的三维单形)。你的四个点不共面,它们的凸包本身就是一个四面体,因此剖分结果只有一个四面体(输出[[3 2 1 0]]),这是算法的正常行为。而你需要的是二维三角面,得用对应的方法提取或生成。

解决方案1:提取凸包的三角面

如果要获取这四个点构成的凸包的所有三角面,使用scipy.spatial.ConvexHull:

from scipy.spatial import ConvexHull
points = [(0, 0, -8), (1, 0, -24), (0, 1, 0), (1, 1, 0)]
hull = ConvexHull(points)
# 输出所有三角面的点索引
print(hull.simplices)

这段代码会输出4个三角面(每个面由3个点索引组成),完全满足你“至少两个三角形”的需求。

解决方案2:投影到平面后做2D Delaunay剖分

如果你的需求是把这些点当作平面点处理(比如忽略z坐标的差异),可以先将点投影到某个平面(比如xy平面),再执行2D Delaunay剖分:

from scipy.spatial import Delaunay
points = [(0, 0, -8), (1, 0, -24), (0, 1, 0), (1, 1, 0)]
# 投影到xy平面,仅保留x、y坐标
points_2d = [(x, y) for x, y, z in points]
triangulation = Delaunay(points_2d)
# 输出2D剖分的三角形索引
print(triangulation.simplices)

运行后会得到两个三角形的剖分结果,和你最初的期望一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 12:21:12