【发布时间】:2011-01-02 10:43:36
【问题描述】:
出于测试目的,我需要创建一组(大)空间多边形。是否有一种算法可以创建一个随机形状的多边形,使其保持在边界包络内?我正在使用 OGC 简单的东西,所以创建众所周知的文本的例程是最有用的,选择的语言是 C#,但它并不那么重要。
【问题讨论】:
标签: geospatial polygon
出于测试目的,我需要创建一组(大)空间多边形。是否有一种算法可以创建一个随机形状的多边形,使其保持在边界包络内?我正在使用 OGC 简单的东西,所以创建众所周知的文本的例程是最有用的,选择的语言是 C#,但它并不那么重要。
【问题讨论】:
标签: geospatial polygon
你的边界信封是什么形状的?如果它是一个矩形,则将随机多边形生成为 [0,1]x[0,1] 内的点列表并缩放到矩形的大小。
如果信封不是矩形,事情就会变得有点棘手。在这种情况下,您只需在单位正方形内生成点并拒绝位于单位正方形部分中的任何未缩放到您选择的边界包络的点,即可获得最佳性能。
HTH
标记
补充
如果您只想要凸多边形,您可以使用 convex hull 算法之一。由于您似乎不只想要凸多边形,因此您建议的圆形扫描会起作用。
但您可能会发现沿平行于 x 轴或 y 轴的线进行扫描更简单。假设 x 轴。
这将生成凸多边形和非凸多边形,但非凸多边形的形式相当有限。没有入口或曲折。
另一个想法
为避免边缘交叉并避免在单位正方形内生成随机点后进行圆形扫描,您可以:
在我的脑海中,这似乎工作正常
【讨论】:
它们真的需要是随机的,还是一些真正的 WKT 会这样做?因为如果可以,只需转到http://koordinates.com/ 并下载几层即可。
【讨论】:
在这里您可以找到两个如何生成随机凸多边形的示例。它们都在 Java 中,但应该很容易将它们重写为 C#:
另一种可能的方法是基于生成随机点集并采用Delaunay tessellation。
一般来说,生成适当的随机多边形的问题并不简单。
【讨论】: