我正在设计一个程序性城市发电机,而生成过程的第一步是创建城市街道。这些街道以直线延伸到一个点,然后它们可以在同一方向上分支,旋转或继续。如果一条街道会撞到另一条街道,它可以停止生长或连接到最近的交叉路口。
我一直在考虑将路口作为顶点,将街道视为边缘。由此,我应该能够将网络分解成最小可能的多边形集合 - 即街道四周都包围的空间。
死胡同街道可以侵入多边形,但如果一条街道两边都有2个交汇点,我希望将其作为多边形的边缘。在处理之前,我可以轻松地删除“死角”(仅有一条边附着的顶点)的街道,因此它们不是问题。
因此,给定顶点和边的集合,有什么方法可以将它们分解为最小的多边形?多边形是凸面还是凹面并不重要,因为它主要用作加载城市位的方式,并将区域标记为加载或卸载,并选择性地选择城市的位进行模拟。
答案 0 :(得分:0)
确保您的边缘有序。例如如果顶点A连接到顶点B,那么有两条边AB和BA。
1)选择一个随机顶点并称之为A。
2)移动到A,使其成为您当前的顶点。
3)选择连接到当前顶点的最右边的顶点并将其称为B.
4)沿着它行进,这样B就是你当前的顶点。
5)移除边缘AB,使其无法再次行走。
6)如果我们不回到起始顶点,那么转到第3步。
7)如果我们回到起始顶点,那么我们找到了一个最小的多边形。
8)虽然仍有边缘,但请返回步骤1