如何才能更好地将城市放置在程序生成的地形周围?

时间:2013-08-29 06:28:37

标签: algorithm nearest-neighbor procedural-generation

我正在制作地形/地图生成器。地形生成工作正常,但在城市周围放置城市时会出现问题。我根据地形的湿度,温度,土壤质量和地下矿物流行情况将城市放置在给定的地形上。当然,最佳地形将具有接近最佳的地形,因此我的城市以群集形式出现,如此(城市是红点):

enter image description here

我倾向于解决的问题是确定两个城市是否在彼此之间的某个特定距离内,如果是,则将其中一个城市移动到远离其他城市的位置。我的问题是:

  1. 这是传播城市的最佳方法吗?
  2. 如果是这样,我可以使用什么技术来确定两个城市之间的距离(我读到最近邻居的搜索,看起来很有希望,也许是这样)?

2 个答案:

答案 0 :(得分:4)

我会降低可能的城市位置的约束。计算城市每个位置的概率。

根据城市尚未占用的所有地点的概率,随机设置一个城市。

比降低新设置城市周围的概率(在一定范围内,在城市附近,概率较低(甚至将它们设置为0)并且随着距离的增加而降低然后更低。

这样,城市应该很自然地遍布你的地形。

示例(非常小)如何选择下一个位置:
您有3个可能的位置,概率为0.9,0,2和0.4 现在总结概率0.9 + 0.2 + 0.4 = 1.5
现在取0到1.5之间的随机数。

0   .. 0.9 take the first location  
0.9 .. 1.1 take the second location  
1.1 .. 1.5 take the third location

答案 1 :(得分:0)

两种方法:

如果您只有少数城市,无论何时考虑添加新城市,只需计算从新网站到现有城市的距离,如果距离低于您设置的阈值,则不要添加城市。< / p>

如果您有很多城市,请分配与原始地图网格大小相同的面具,每当您添加城市时,请将该城市附近的所有点标记为“已占用”,这意味着您无法添加新城市对那些。基本上,您可以通过在蒙版中标记,将现有城市附近的地形点的适用性设置为零。创建一个磁盘形掩码以获得最佳效果。如果你愿意,你可以使用从城市开始的洪水填充,然后只通过陆地路线填充磁盘掩模,这样一个城市的影响就会停在一条河的一边。 (想想Buda和Pest)。