我正在编写一个数据分析程序,其中一部分需要查找形状的体积。形状信息以丢失点的形式出现,给出点的半径和角度坐标。通过非均匀网格进行二维积分
如果数据点均匀分布在坐标空间中,我将能够执行积分,但不幸的是数据点基本上是随机分布的。
我的低效方法是找到每个点的最近邻居,然后像这样拼接形状,找到缝合在一起的部分的体积。
有没有人有更好的方法?
谢谢。
我正在编写一个数据分析程序,其中一部分需要查找形状的体积。形状信息以丢失点的形式出现,给出点的半径和角度坐标。通过非均匀网格进行二维积分
如果数据点均匀分布在坐标空间中,我将能够执行积分,但不幸的是数据点基本上是随机分布的。
我的低效方法是找到每个点的最近邻居,然后像这样拼接形状,找到缝合在一起的部分的体积。
有没有人有更好的方法?
谢谢。
如果这些是表面点,一个好的方法是将表面离散为三角形,并使用格林定理将体积积分转换为表面积分。然后你可以在三角形上使用简单的高斯正交。
好吧,在这里,沿着duffymo的线我想。
首先,对表面进行三角测量,并确保三角形的方向一致。这意味着相邻三角形的方向是这样的,即公共边沿在相反的方向上被穿越。其次,对于每个三角形ABC,计算该表达式:H * cross2D(BA,CA),其中cross2D仅使用坐标X和Y计算交叉乘积,忽略Z坐标,并且H是任何方便的Z坐标指向三角形(尽管重心会提高精度)。
三,总结以上所有表达式。结果将是曲面内的有符号体积(加或减取决于方向的选择)。
听起来像你想要点云的convex hull。幸运的是,有效的方式可以让你到达那里。检查出scipy.spatial.ConvexHull
。
您是否将高斯定理应用于表面区域形式,从点的起点到点的矢量?是的,这应该工作。集成$ Z \ cdot dX \ wedge dY $也可以,而且应该更快。 – Michael 2013-09-23 23:51:10
我的意思是将体积积分转化为表面积分并计算简单形状上积分的总和。 – duffymo 2013-09-24 00:16:29