2010-01-07 55 views
2

我需要为测试目的创建(大)空间多边形。有没有一种算法可以创建一个随机形状的多边形,并保留在边界的包络中?我使用OGC Simple的东西,所以创建知名文本的例程是最有用的,选择的语言是C#,但并不重要。创建封闭的空间多边形

回答

1

在这里你可以找到两个如何生成随机凸多边形的例子。他们都是在Java中,但应该很容易将它们改写为C#:从太阳

另一种可能的方法随机点并采用曲面细分算法Delaunay

一般来说,产生合适的随机多边形的问题并不是微不足道的。

1

你的边界包络是什么形状?如果它是一个矩形,然后生成你的随机多边形作为[0,1] x [0,1]内的点列表并缩放到矩形的大小。

如果信封不是矩形,则会变得更棘手。在这种情况下,您可能会获得最佳性能,只需在单位正方形内生成点并拒绝位于单位正方形部分的任何不在您选择的边界包围范围内的位置。

HTH

马克

补充

如果你想只有你会使用的凸包算法中的一个凸多边形。由于您似乎只想要凸多边形,因此您可以使用圆形扫描的建议。

但是,您可能会发现沿平行于x轴或y轴的直线扫描会更简单。假设x轴。

  1. 将点排序为x次。
  2. 选择最左边的(即第一个)点。在这个点的y坐标上绘制一个穿过单位正方形的假想水平线。准备沿假想线上方的多边形的边界创建一个点列表,并沿着它下面的边界创建另一个列表。
  3. 选择下一个点。将其添加到由y坐标确定的上边界或下边界列表中。
  4. 继续操作,直到出现问题。

这将生成凸和非凸多边形,但非凸将是一个相当有限的形式。没有入口或曲折。

的另一种思路

为了避免边交叉,避免产生单位正方形你可以内部的随机点之后圆形扫:

  1. 产生极坐标的单位圆内随机点即(r,theta)。
  2. 以theta顺序对点进行排序。
  3. 转换为直角坐标。
  4. 将单位圆缩放到您选择的边界椭圆。

关闭我的头顶,这似乎工作确定

+0

好主意,是否有一种'排序'他们的方式,所以没有交叉线或OGC简单处理。我能想到的唯一技术就是找到所有点的中心,然后依次循环扫描每个点。 – MrTelly 2010-01-07 12:10:15

+0

我对OGC一无所知,但对计算几何知之甚少,所以我的帮助不可能比现在更具体。 – 2010-01-07 12:34:12

1

他们是否真的需要是随机的,或将一些真正的高铁总站呢?因为如果会的话,只需去http://koordinates.com/并下载几层。