我正在对球体上的粒子进行大都会蒙特卡罗模拟,并且在给定的时间步长中有关于随机运动的问题.
我知道要在球体上获得随机点的均匀分布以开始它是不够的,使用天真最简单的方法(使用具有常数R的球面坐标并选择随机角度theta和phi),但是必须使用例如其中一种方法:http://mathworld.wolfram.com/SpherePointPicking.html
看一下球体上蒙特卡罗的另一个代码,我看到了一种生成随机移动的相当复杂的方法:选择一个随机粒子,计算将其移动到北极的旋转矩阵,找到一个小于一定长度的随机笛卡尔向量并移动它到北极,标准化笛卡尔矢量,然后将其旋转回原始粒子位置附近.
这是为了获得一个无偏见的新随机位置.虽然我怀疑它与详细的平衡有关,但我完全不理解这个理由.但我的感觉是应该有一种更容易(即更快)的方法来做到这一点.实际上,直觉上我觉得在这种情况下可以找到两个小的随机角度theta和phi并将它们添加到粒子的位置 - 或者这是一个错误?
您描述的算法背后的基本原理是将点映射到极点,生成切平面,以通常的方式均匀生成笛卡尔向量,然后将其映射回球体,最后反转旋转。由于切平面是导数,因此对于大球体和小台阶来说,这是一个很好的近似值。
我们可以做得更好吗?或者至少窃取别人的代码?或许。考虑一下:由于MathWorld 上的那篇文章,您已经可以在球体上生成均匀分布的随机点。
不失一般性,您可以将当前点视为球体的极点。如果您使用 MathWorld 算法生成随机点,您就会知道生成的点具有处于任何方位角的均匀概率。
然后,问题就简化为在球体上找到一个方位,给定两个点的 phi/theta 值,然后沿着该方位的大圆路线生成一个增量表面距离的新点。
对于这个新版本的问题,您可以通过导入您最喜欢的 GIS 或投影库并使用地球的球形模型(具有适当的缩放比例)来获取所需的所有代码。
许多人似乎认为该网站在球形导航方面有大量良好的数学知识。