【发布时间】:2013-03-04 17:56:22
【问题描述】:
我正在编写一个数据分析程序,其中一部分需要找到形状的体积。形状信息以丢失点的形式出现,给出点的半径和角坐标。
如果数据点在坐标空间中均匀分布,我将能够执行积分,但不幸的是数据点基本上是随机分布的。
我的低效方法是找到每个点的最近邻居,然后像这样将形状缝合在一起,找到缝合在一起的部分的体积。
有人有更好的方法吗?
谢谢。
【问题讨论】:
标签: math numeric numerical-methods
我正在编写一个数据分析程序,其中一部分需要找到形状的体积。形状信息以丢失点的形式出现,给出点的半径和角坐标。
如果数据点在坐标空间中均匀分布,我将能够执行积分,但不幸的是数据点基本上是随机分布的。
我的低效方法是找到每个点的最近邻居,然后像这样将形状缝合在一起,找到缝合在一起的部分的体积。
有人有更好的方法吗?
谢谢。
【问题讨论】:
标签: math numeric numerical-methods
如果这些是表面点,一种好方法是将表面离散化为三角形,并使用格林定理将体积积分转换为表面积分。然后你可以在三角形上使用简单的高斯求积。
【讨论】:
好的,就是这样,我认为是 duffymo 的路线。
首先,对曲面进行三角测量,并确保三角形的方向一致。这意味着相邻三角形的方向使得公共边沿相反方向遍历。
其次,对于每个三角形 ABC,计算以下表达式:H*cross2D(B-A,C-A),其中 cross2D 仅使用坐标 X 和 Y 计算叉积,忽略 Z 坐标,H 是任何方便点的 Z 坐标在三角形中(尽管重心会提高精度)。
第三,总结以上所有表达式。结果将是表面内的有符号体积(正负取决于方向的选择)。
【讨论】:
听起来您想要点云的convex hull。幸运的是,有一些有效的方法可以让你到达那里。查看scipy.spatial.ConvexHull。
【讨论】: