如何计算均匀球体的质量?

时间:2010-12-10 18:56:34

标签: geometry volume integrate

我想基于三维离散不均匀密度分布来计算球体的质量。让我们说一组3x3x3不同密度的立方​​体由一个球体刻上。使用Python总结分区质量的最快方法是什么?

我试图用球体的数学方程式计算体积:x ^ 2 + y ^ 2 + z ^ 2 = R ^ 2,其中一个立方体的范围使用 scipy.integrate.dblquad < / em>的。 然而,结果仅在边界小于球体半径的情况下才有效,并且重复计算可以说50'000球体,每个球体具有27个立方体,这将非常慢。

另一方面,由于相当粗糙和离散的质量分布,我认为不能使用通常的CoM驯化方程。

3 个答案:

答案 0 :(得分:1)

计时实验

你没有指定时间限制,所以我做了一个很好的集成包的实验。

如果没有优化,如果立方体密度是简单的函数,则在标准笔记本电脑中可以在0.005秒内评估球坐标中的每个积分。

作为参考,这是Mathematica中的程序:

Clear@f;
(* Define a cuboid as density function *)
iP = IntegerPart;
f[{x_, y_, z_}, {lx_, ly_, lz_}] :=   iP[x - lx] + iP[y - ly] + iP[z - lz] /; 
   lx <= x <= lx + 3 && ly <= y <= ly + 3 && lz <= z <= lz + 3;

f[{x_, y_, z_}, {lx_, ly_, lz_}] := Break[] /; True;

Timing[Table[s = RandomReal[{0, 3}, 3]; (*sphere center random*)
   sphereRadius = Min[Union[s, 3 - s]]; (*max radius inside cuboid *)
   NIntegrate[(f[{x, y, z} - s, -s] /.  (*integrate in spherical coords *)
       {x -> r Cos@th Sin@phi, 
        y -> r Sin@th Sin@phi, 
        z -> r Cos@phi}) r^2 Sin@phi,
       {r, 0, sphereRadius}, {th, 0, 2 Pi}, {phi, 0, Pi}], 
         {10000}]][[1]]  

结果是 52秒,进行10 ^ 4次迭代。

所以也许你不需要优化很多......

答案 1 :(得分:0)

我无法得到你用球体刻的确切含义。我也没有尝试过scipy.integrate。但是,这里有一些:

将3x3x3立方体设置为单位密度。然后分别对每个多维数据集进行集成,因此您应该在此处拥有卷多维数据集 V_ijk。现在对于每个球体,您可以通过求和V_ijk*D_ijk得到每个球体的质量,其中D_ijk是球体的密度。

它应该快得多,因为你现在不需要进行集成。

答案 2 :(得分:0)

您可以获得立方体(或矩形棱柱)与球体之间相交体积的分析公式。这并不容易,但它应该是可能的。我已经完成了2D任意三角形和圆形。基本思想是将交叉点分解为更简单的部分,如四面体和体积球形三角形扇区,其中已知相对简单的体积公式。主要困难在于考虑交叉路口的所有可能情况。幸运的是,两个物体都是凸面的,因此可以保证单个凸交点体积。

近似方法可能是简单地细分立方体,直到您的近似数值积分算法起作用;这应该还是比较快的。你知道Pick's Theorem吗?这仅适用于2D,但我相信3D generalizations