【问题标题】:Randomly generating coordinates inside a bounded region [closed]在有界区域内随机生成坐标
【发布时间】:2014-01-18 14:15:21
【问题描述】:

我有一个构成地理区域边界的经度和纬度列表。我想在这个地理区域内生成一些随机坐标。您能否建议一些我可以采用任何语言的方法?

【问题讨论】:

标签: algorithm latitude-longitude


【解决方案1】:

就像任何问题一样,有很多方法可以解决它,我首先想到的是

  1. 我们称这个“地理区域”为多边形。
  2. 找到多边形的边界框(很简单,只要找到 maxX maxY minX minY)。
  3. 在边界框x=rand()%(maxX-minX)+minX 内生成随机坐标(Y 也一样)
  4. 测试坐标是否在多边形内部,这个问题有很多解决方案,它们可以用任何给定的语言实现,因此您不必自己实现它。 这是 C/C++ 中的一个实现(很容易将其更改为任何其他语言):Point in Polygon Algorithm

http://en.wikipedia.org/wiki/Point_in_polygon

编辑: 正如 Jan Dvorak 所建议的那样,在大面积上使用它可能会有问题,我相信如果你的多边形靠近赤道并且他的大小小于 100 公里,它会工作得很好。

如果您在 180° 线附近也会遇到问题,因为它旁边就是 -180°。

【讨论】:

  • 这在大面积上很复杂,您无法用平面多边形近似球形多边形
【解决方案2】:

首先,我们将地球的形状建模为一个球体。解决oblate spheroid 的问题要困难得多。

生成random point on a sphere 相对容易。

生成random point on a spherical triangle 更难,但在这篇链接的文章中有解释。

您需要将多边形划分为spherical triangles,并根据它们的面积对它们进行加权。然后根据权重随机选择一个球面三角形。

对于一般情况,triangulating a spherical polygon is not possible,然而,对于大多数实际情况,三角测量是一项简单的任务。 here(算法 1,第 901 页)描述了一种这样的算法,并提供了 C++ 源代码 here(搜索“计算构造板块几何参数的计算方法”)。

【讨论】:

  • 地理区域不是很大。所以,我没有遵循这种方法。但是这些链接非常有用,适合更大的地理区域。
【解决方案3】:

你可以试试这个:

  1. 计算此地理区域内的所有坐标,请参阅保存在vector<Point> points

  2. [0, points.size()) 内生成一个随机整数,见k

  3. points[k] 是你想要的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-03
    • 1970-01-01
    • 1970-01-01
    • 2013-02-08
    • 2023-01-07
    • 1970-01-01
    • 2019-08-28
    相关资源
    最近更新 更多