【问题标题】:How to randomly select a point on the surface of the Earth?如何随机选择地球表面的一个点?
【发布时间】:2011-09-17 09:55:26
【问题描述】:

正如标题所说,如何在没有偏差的情况下随机选择地球表面的一个坐标? rand(-90,90),rand(-180,180) 的简单解决方案将有利于极地地区而不是赤道地区。

【问题讨论】:

标签: algorithm geolocation


【解决方案1】:

阿基米德证明了一个绝妙的定理,即球体上一个区域的面积等于该区域在外接圆柱体曲面上的水平投影面积(因此特别是,整个球体的面积为等于外接圆柱整个曲面的面积)。您可以通过绘制小“矩形”(以纬度和经度线为界)并为它们证明这一点来说服自己,然后(非正式地)观察到极限处所有东西都由足够小的矩形来近似,或者更正式地说,该区域一个区域的定义是一些积分,即(感谢 Lebesgue)一系列矩形和的限制。

因此,如果您在圆柱体的曲面上选择一个随机均匀分布的点(很容易,因为它与矩形等距),然后将该点水平投影回球体上,您的分布将具有以下属性:概率一个点在任何区域中的大小与该区域的面积成正比。

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

由于您用于arccos 的任何浮点类型的(缺乏)精度,您仍然会有一点偏差。我不确定这是否会引起注意,但如果是这样并且如果您想修复它,您可以使您的 y 值更精确地接近 +/-1(实际上是通过在小数点后生成更多位)。或者更确切地说,将范围一分为二,生成接近 0 的额外位,然后使用准确的 arccos_1_minus_x 函数。

【讨论】:

    【解决方案2】:

    听起来您正在寻找uniform random distribution on a sphere

    在球坐标中:

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

    【讨论】:

    • 那么我认为算法看起来像这样是否正确?经度 = 2 * PI * rand(0,1) 纬度 = arccos(1 - 2 * rand(0,1))
    猜你喜欢
    • 2012-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多