7

问候每一个人!

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

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

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

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

非常感谢任何帮助,并且作为记录,我在 C# 和 XNA 中执行此操作,尽管我认为这更多是在理论层面上。

谢谢你的时间,

卡尔

4

2 回答 2

7

所以,上周我一直在谷歌搜索、阅读和理解更多内容,我找到了解决问题的方法,我认为我可以分享。我发现这篇精彩的博客文章基本上为我理顺了一切:

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

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

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

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

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

快乐编码!

卡尔

于 2012-10-24T07:38:12.907 回答
5

我是上述博客文章的作者——很高兴你发现它有用!我从来没有完成过Spare Parts的工作——如果不出意外,我将不得不更改名称——但你让我再次考虑它。

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

编辑:我已经删除了我的旧网站,但我在这里重新创建了帖子。希望它仍然有帮助!

于 2012-10-28T14:20:28.430 回答