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

7

大家好!

我正在研究道路网络的程序化生成,偶然发现了L-system算法。从我对该主题的各种科学论文以及进一步的论文中所理解的来看,该算法被改变为使用“全局目标和本地约束”,其中采取的路径被修改以适应输入值,如地形和人口密度。至少整体概念上,我已经理解了这部分内容,但我应该如何修改算法呢?

现在,我有一个字符串,根据一组规则在时间步长内进行修改。然后我分析字符串并移动和转向,同时渲染结果并在屏幕上得到美丽的图案。

那么,要创建主要道路的网络,我是否仍然应该使用基础公理和规则集,然后应用约束条件呢?如果是这样,一个良好的起始值和规则集会是什么呢?

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

非常感谢您的帮助,我想声明一下,我是用C#和XNA完成这个项目,虽然我认为这更多是在理论层面上。

感谢您的时间,

Karl

2个回答

8
所以,我在过去的一周里进行了谷歌搜索,阅读和理解更多内容,并找到了一个解决方案,我想分享一下。 我发现这篇博客文章对我来说基本上解决了所有问题:http://www.newton64.ca/blog/?p=747#7472 该帖子是基于另一篇博客文章的:http://mollyrocket.com/forums/viewtopic.php?t=730&sid=a9a2628b059a727cbde67309757ed178 现在,就L系统而言,我不确定这种方法是否仍然是L系统。当然,在构建网络的迭代过程中存在相似之处。在L系统中,字符串随着迭代而增长,并使用“ [”或“]”创建分支(至少在我看到的情况下),而在我现在采用的方法中,while循环和优先级队列几乎可以实现同样的功能。 我还想指出,我并没有完全理解论文如何使用L系统生成道路网络,所以我的推理可能有些偏差。但是,除了算法命名和边界之外,我找到了一个适合我使用的解决方案,这对我来说很好。 愉快的编码! 卡尔

请查看此其他L系统问题:http://stackoverflow.com/questions/15151958/procedural-generation-of-city-streets - Liam
1
很遗憾,这两个链接现在都无法访问了,但是我在Wayback Machine上找到了前一个链接,如果对未来的读者有用的话:http://web.archive.org/web/20130827130016/http://www.newton64.ca/blog/?p=747 - beyond-code
更新 - 这可能是失踪的 Molly Rocket 帖子 - http://nothings.org/gamedev/l_systems.html - beyond-code

5
我是上述博客文章的作者 - 很高兴你发现它有用!我从来没有完成过备件 - 即使什么都没有,我也必须更改名称 - 但你让我再次考虑了一下。
当然,我描述的算法可能不再是L系统的一部分;重要的是,我认为它在功能上几乎是等效的。当涉及到编程时,我是一个实证主义者,所以如果它有效,就编译它! 编辑:我已经删除了我的旧网站,但我已经重新创建了这篇文章在这里。希望它仍然有用!

很高兴收到你的消息。首先,我想我现在欠你一瓶啤酒,我很乐意请你喝一杯,因为你的帖子解决了我的问题。其次,你应该真的去尝试一下Spare Parts(换个名字),听起来很有趣。我非常喜欢你对编程的态度。我也倾向于这样做。我一直在努力利用全局目标和局部约束来构建一个整洁的道路网络,事情正在变得更好。我真的很喜欢将复杂的问题分解成简单的数学小块的方法。再次感谢! - Karl Nilsson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接