L系统如何修改道路网络?

时间:2012-10-18 13:53:22

标签: c# xna-4.0 procedural-generation

向所有人致以问候!

我目前正在研究道路网络的程序生成,并偶然发现了L系统算法。根据我对该主题的各种科学论文的理解,以及关于该主题的论文的进一步论文,该算法被改为使用“全局目标和局部约束”,其中修改所采用的路径以适合诸如地形的输入值和人口密度。现在我理解这个部分,或至少是整体概念,但我该如何修改算法呢?

现在我有一个根据一组规则在时间步长上修改的字符串。然后我分析字符串并在我通过字符时移动和转动,渲染结果并在屏幕上获得漂亮的图案。

现在,要创建一个主要道路网络,我是否仍应使用带有规则集的基本公理然后应用约束?如果是这样,那么一套好的起始值和规则是什么呢?

或者我应该用约束和全局目标替换基本规则集?如果是这样,原始的L系统算法还剩下什么?

非常感谢任何帮助,而且我在C#和XNA中做的记录,尽管我在理论层面上更多地考虑这一点。

感谢您的时间,

卡尔

2 个答案:

答案 0 :(得分:7)

所以,我上周一直在谷歌搜索,阅读和理解更多,我找到了一个解决方案,我认为我可能会分享。 我找到了这篇精彩的博客文章,基本上为我解决了一切:

http://www.newton64.ca/blog/?p=747#7472

该帖子基于此处创建的另一篇博文:

http://mollyrocket.com/forums/viewtopic.php?t=730&sid=a9a2628b059a727cbde67309757ed178

现在,就L系统而言,我不太确定这种方法是否真的是一个L系统。当然,关于构建网络的迭代过程有相似之处。在L系统中,字符串在迭代中增长,并且使用“[”或“]”创建分支(至少在我看到的情况下),并且在我现在采用的方法中,一个while循环和一个优先级队列几乎是一样的。

我还想指出,我并没有完全理解“描述”如何使用L系统生成道路网络的论文,所以我的推理可能有点偏离。但是除了算法命名和边界之外,我找到了一个适合我的解决方案,现在这很好。

快乐的编码!

卡尔

答案 1 :(得分:5)

我是上述博文的作者 - 很高兴您发现它很有用!我从来没有完成备件 - 如果没有别的,我必须change the name - 但你让我再次考虑它。

当然,我描述的算法可能不再是L系统了;但重要的是,我认为它在功能上几乎相同。在编程方面,我是一名实证主义者,所以如果它有效,请编译它!

编辑:我已经取消了旧网站,但我重新发布了帖子here。希望它仍然有用!