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