我需要为测试目的创建(大)空间多边形。有没有一种算法可以创建一个随机形状的多边形,并保留在边界的包络中?我使用OGC Simple的东西,所以创建知名文本的例程是最有用的,选择的语言是C#,但并不重要。创建封闭的空间多边形
2
A
回答
1
在这里你可以找到两个如何生成随机凸多边形的例子。他们都是在Java中,但应该很容易将它们改写为C#:从太阳
- Generate Polygon例如
- 从JTS邮件列表,根据发电机组的发布Minimum Area bounding box by Michael Bedward
另一种可能的方法随机点并采用曲面细分算法Delaunay。
一般来说,产生合适的随机多边形的问题并不是微不足道的。
1
你的边界包络是什么形状?如果它是一个矩形,然后生成你的随机多边形作为[0,1] x [0,1]内的点列表并缩放到矩形的大小。
如果信封不是矩形,则会变得更棘手。在这种情况下,您可能会获得最佳性能,只需在单位正方形内生成点并拒绝位于单位正方形部分的任何不在您选择的边界包围范围内的位置。
HTH
马克
补充
如果你想只有你会使用的凸包算法中的一个凸多边形。由于您似乎只想要凸多边形,因此您可以使用圆形扫描的建议。
但是,您可能会发现沿平行于x轴或y轴的直线扫描会更简单。假设x轴。
- 将点排序为x次。
- 选择最左边的(即第一个)点。在这个点的y坐标上绘制一个穿过单位正方形的假想水平线。准备沿假想线上方的多边形的边界创建一个点列表,并沿着它下面的边界创建另一个列表。
- 选择下一个点。将其添加到由y坐标确定的上边界或下边界列表中。
- 继续操作,直到出现问题。
这将生成凸和非凸多边形,但非凸将是一个相当有限的形式。没有入口或曲折。
的另一种思路
为了避免边交叉,避免产生单位正方形你可以内部的随机点之后圆形扫:
- 产生极坐标的单位圆内随机点即(r,theta)。
- 以theta顺序对点进行排序。
- 转换为直角坐标。
- 将单位圆缩放到您选择的边界椭圆。
关闭我的头顶,这似乎工作确定
1
他们是否真的需要是随机的,或将一些真正的高铁总站呢?因为如果会的话,只需去http://koordinates.com/并下载几层。
相关问题
- 1. 从边界点创建封闭多边形
- 2. 创建多边形
- 3. R,空间多边形
- 4. Python龟图形填充非封闭多边形
- 5. QGraphicsPolygonItem绘制一个开放的(不封闭的)多边形
- 6. 为封闭多边形寻找Douglas-Peucker算法的好起点
- 7. 一个简单的封闭多边形曲线生成算法
- 8. 是封闭的多边形网格翻转?
- 9. Java:使用创建的多边形创建星形
- 10. 从独立线创建的形状创建一个多边形
- 11. 如何从多边形表创建多边形
- 12. MemSQL多边形地理空间联合
- 13. 逗号VS在SVG多边形空间
- 14. R空间多边形采样错误
- 15. SQL空间多边形向内
- 16. Oracle空间计算区域内的多边形组中的一组多边形内部的多边形ID
- 17. 创建用点填充的多边形
- 18. 创建一定半径的多边形
- 19. 多边形没有关闭
- 20. 从封闭的三角形网格创建四面体网格
- 21. C#WPF - 使多边形封装文本
- 22. 外部信封到一组多边形
- 23. 从数据框列表创建空间多边形数据框列表
- 24. GEOSGeometry错误创建多边形
- 25. Leaflet在geoJson顶部创建多边形
- 26. 在XNA中创建2D多边形
- 27. Solr 4空间搜索多边形vs多边形与距离参数搜索
- 28. 如何在位于空中的KML中创建多边形形状?
- 29. 创建封闭的条件是什么?
- 30. SVG中六边形之间的空间
好主意,是否有一种'排序'他们的方式,所以没有交叉线或OGC简单处理。我能想到的唯一技术就是找到所有点的中心,然后依次循环扫描每个点。 – MrTelly 2010-01-07 12:10:15
我对OGC一无所知,但对计算几何知之甚少,所以我的帮助不可能比现在更具体。 – 2010-01-07 12:34:12