【问题标题】:Creating closed spatial polygons创建封闭空间多边形
【发布时间】:2011-01-02 10:43:36
【问题描述】:

出于测试目的,我需要创建一组(大)空间多边形。是否有一种算法可以创建一个随机形状的多边形,使其保持在边界包络内?我正在使用 OGC 简单的东西,所以创建众所周知的文本的例程是最有用的,选择的语言是 C#,但它并不那么重要。

【问题讨论】:

    标签: geospatial polygon


    【解决方案1】:

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

    如果信封不是矩形,事情就会变得有点棘手。在这种情况下,您只需在单位正方形内生成点并拒绝位于单位正方形部分中的任何未缩放到您选择的边界包络的点,即可获得最佳性能。

    HTH

    标记

    补充

    如果您只想要凸多边形,您可以使用 convex hull 算法之一。由于您似乎不只想要凸多边形,因此您建议的圆形扫描会起作用。

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

    1. 将点按 x 顺序排序。
    2. 选择最左边(即第一个)点。在该点的 y 坐标处,在单位正方形上画一条假想的水平线。准备沿假想线上方的多边形边界创建一个点列表,并沿其下方的边界创建另一个列表。
    3. 选择下一个点。将其添加到由它的 y 坐标确定的上限或下限列表中。
    4. 继续直到你的分数用完。

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

    另一个想法

    为避免边缘交叉并避免在单位正方形内生成随机点后进行圆形扫描,您可以:

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

    在我的脑海中,这似乎工作正常

    【讨论】:

    • 好主意,有没有办法对它们进行“排序”,这样就没有交叉线,或者 OGC 是否简单处理。我能想到的唯一技术是找到所有点的中心,然后在一个圆圈中扫描,依次拾取每个点。
    • 我对 OGC 一无所知,但对计算几何略知一二,所以我的帮助再具体不过了。
    【解决方案2】:

    它们真的需要是随机的,还是一些真正的 WKT 会这样做?因为如果可以,只需转到http://koordinates.com/ 并下载几层即可。

    【讨论】:

      【解决方案3】:

      在这里您可以找到两个如何生成随机凸多边形的示例。它们都在 Java 中,但应该很容易将它们重写为 C#:

      另一种可能的方法是基于生成随机点集并采用Delaunay tessellation。

      一般来说,生成适当的随机多边形的问题并不简单。

      【讨论】:

        猜你喜欢
        • 2018-12-13
        • 1970-01-01
        • 2011-03-05
        • 1970-01-01
        • 2013-04-25
        • 1970-01-01
        • 1970-01-01
        • 2021-11-08
        • 2015-01-28
        相关资源
        最近更新 更多