将边分配给最小可能多边形的算法?

时间:2015-01-19 22:28:54

标签: c# polygons procedural-generation

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

我一直在考虑将路口作为顶点,将街道视为边缘。由此,我应该能够将网络分解成最小可能的多边形集合 - 即街道四周都包围的空间。

死胡同街道可以侵入多边形,但如果一条街道两边都有2个交汇点,我希望将其作为多边形的边缘。在处理之前,我可以轻松地删除“死角”(仅有一条边附着的顶点)的街道,因此它们不是问题。

因此,给定顶点和边的集合,有什么方法可以将它们分解为最小的多边形?多边形是凸面还是凹面并不重要,因为它主要用作加载城市位的方式,并将区域标记为加载或卸载,并选择性地选择城市的位进行模拟。

1 个答案:

答案 0 :(得分:0)

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

1)选择一个随机顶点并称之为A。

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

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

4)沿着它行进,这样B就是你当前的顶点。

5)移除边缘AB,使其无法再次行走。

6)如果我们不回到起始顶点,那么转到第3步。

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

8)虽然仍有边缘,但请返回步骤1