【问题标题】:Algorithm to assign edges to smallest possible polygons?将边缘分配给最小可能多边形的算法?
【发布时间】:2015-01-19 22:28:54
【问题描述】:

我正在设计一个程序化城市生成器,生成过程的第一步是创建城市街道。这些街道以直线延伸到一个点,然后它们可以分支、旋转或沿同一方向继续。如果一条街道会撞到另一条街道,它可以停止增长或连接到最近的路口。

我一直认为交叉点是顶点,街道是边。由此,我应该能够将网络分解为尽可能小的多边形的集合——即,一个被街道包围的空间。

死胡同可以侵入多边形,但如果街道两侧有 2 个路口,我希望将其作为多边形的边缘。在处理之前,我可以轻松地将“死角”(只有一条边连接到它们的顶点)的街道从考虑中移除,因此它们不是问题。

那么给定顶点和边的集合,有什么好的方法可以将它们分解成尽可能小的多边形?多边形是凸面还是凹面都没有关系,因为它主要用作加载城市的一部分并将一个区域标记为加载或卸载,并选择性地选择城市的一部分进行模拟。

【问题讨论】:

  • 这里不允许问这个问题。
  • 尝试在programmers.stackexchange.com或reddit.com/r/proceduralgeneration上询问

标签: c# polygons procedural-generation


【解决方案1】:

确保您的边缘是有序的。例如如果顶点 A 连接到顶点 B,则有两条边 AB 和 BA。

1) 选择一个随机顶点并将其命名为 A。

2) 移动到 A,使其成为您当前的顶点。

3) 选择连接到当前顶点的最右边的顶点并将其命名为 B。

4) 沿着它移动,使 B 成为您当前的顶点。

5) 移除边 AB 使其不能再次移动。

6) 如果我们没有回到起始顶点,则转到第 3 步。

7) 如果我们回到起始顶点,那么我们找到了一个最小的多边形。

8) 当还有边时,返回步骤 1

【讨论】:

    猜你喜欢
    • 2011-09-15
    • 2018-04-10
    • 2012-01-19
    • 1970-01-01
    • 1970-01-01
    • 2010-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多