创建简单的城市街道

Creating simple city streets

我正在尝试创建一个算法来创建一个简单的二维城市道路系统。它甚至不会是程序性的,只是局限于一个小网格。

简单来说,我的意思是这样的:

我曾想过从边缘射出随机长度的线条,但这并没有给我想要的连贯外观。

我也试过随机放置节点并用 L 形线连接它们,但也没有产生好的结果。

任何指向资源、理论或示例代码的链接都将不胜感激!

P.S 可以是任何语言。我只需要知道这背后的概念。

我会创建不同大小的随机块,然后将它们加在一起并在代表街道的每个块之间留下 space。

详细来说,我会制作一个二维数组。例如,将第一个随机方块放在一个角落,并为该方块覆盖的所有字段设置一个非街道方块的 id。用街道瓷砖包围整个街区。然后通过将下一个街区放在第一个街区的街道砖旁边来重复这个过程。这样做直到数组中的所有字段都是非街道图块或街道图块。

生成地形时,例如山脉,经常使用分形结构,所以也许可以在这里使用类似的想法。执行 Google 搜索 "fractal terrain generation" 以阅读更多内容。对于生成街道布局的情况,您可以尝试以下算法(这只是我的头脑,所以不能保证这实际上看起来不错):

  • 从一个矩形区域开始。
  • 在随机位置放置从一条边到另一条边的少量随机街道。随机性确保了布局的变化。这个单次迭代的示例可能看起来像您在问题中给出的示例,但更简单,我猜 1-4 行是合理的。
  • 您刚刚创建的街道将您的区域划分为矩形块。对每个块递归应用相同的划分算法,当然每次选择不同的随机数。
  • 经过 3 或 4 次迭代后,您应该拥有一个相当复杂的街道网络。您可以使在后续迭代中创建的街道稍微窄一些,以便您在城市中拥有几条主要街道、一些主要街道和大量小街道。