【问题标题】:How is L-systems for road networks modified?道路网络的 L 系统如何修改?
【发布时间】:2012-10-18 13:53:21
【问题描述】:

大家好!

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

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

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

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

非常感谢任何帮助,我在 C# 和 XNA 中做这件事的记录,尽管我认为这更多是在理论上。

感谢您的宝贵时间,

卡尔

【问题讨论】:

    标签: c# xna-4.0 procedural-generation


    【解决方案1】:

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

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

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

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

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

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

    编码愉快!

    卡尔

    【讨论】:

    【解决方案2】:

    我是上述博文的作者——很高兴你发现它有用!我从来没有抽空完成备件——如果不出意外,我必须change the name——但你让我又开始考虑了。

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

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

    【讨论】:

    • 很高兴收到您的来信。首先,我想我现在欠你一杯啤酒,我很乐意给你买一杯,因为你的帖子解决了我的问题。其次,你真的应该拿起Spare Parts(用另一个名字),听起来很有趣。我真的很喜欢你对编码的态度。我自己也倾向于这样做。我一直在努力实现全球目标和当地限制,以建立一个整洁的道路网络,并且事情正在实现。我真的很喜欢如何将一个复杂的问题分解成更小的简单数学块。再次感谢!
    猜你喜欢
    • 2020-08-25
    • 2020-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-04
    • 2017-03-25
    • 1970-01-01
    • 2015-01-14
    相关资源
    最近更新 更多