如何在地球表面随机选择一个点?

4

如标题所述,如何在不偏差的情况下随机选择地球表面上的坐标?简单的解决方案是使用 rand(-90, 90) 和 rand(-180, 180),但这会使极地区域比赤道区域更有利。


2
你试过搜索吗?对我来说,“球面上的随机点”搜索结果很多。 - John Bartholomew
2个回答

8

看起来你正在寻找一个关于球体均匀随机分布的解释

enter image description here

在球坐标系中:

θ = 2π * rand(0,1)
Φ = arccos(1 - 2*rand(0,1))

那么我这样想算法是正确的吗? 经度 = 2 * PI * rand(0,1) 纬度 = arccos(1 - 2 * rand(0,1)) - justkevin

2
Archimedes证明了一个巧妙的定理,即球面上某个区域的面积等于该区域在外接圆柱体的曲面上的水平投影面积(因此特别地,整个球面的面积等于外接圆柱体的整个曲面的面积)。您可以通过绘制由纬线和经线界定的小“矩形”并对这些矩形进行证明来使自己相信这一点,然后观察(非正式地)在极限情况下,一切都可以用足够小的矩形逼近,或者更正式地说,一个区域的面积被定义为某个积分,即(感谢Lebesgue)一系列矩形之和的极限。

因此,如果您在圆柱体的曲面上随机均匀分布的选取一个点(因为它与矩形同构),然后将该点水平投影回球面,那么您的分布将具有以下属性:点在任何区域中的概率与该区域的面积成比例。

这意味着选择经度在范围(-pi,pi]内均匀分布,并将纬度设置为arccos(y)-pi/2,其中y在范围(-1,1]内均匀分布。

由于您使用的arccos浮点类型的精度(或者说缺乏精度),仍然会有一些偏差。我不确定是否会注意到这一点,但如果确实如此,而且您想要修复它,那么可以使y值在接近+/-1时更加精确(实际上是通过在小数点后生成更多位)。或者,将范围分成两个部分,在接近0的地方生成额外的位,然后使用准确的arccos_1_minus_x函数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接