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