【问题标题】:Line and intersection based pathfinding基于线和交叉点的寻路
【发布时间】:2014-10-13 11:53:21
【问题描述】:

我正在尝试开发一种寻路算法,通过跟踪从初始位置到最终位置的线来找到到某个点的最近路径。然后我测试与障碍物的交叉点(我的游戏中的所有障碍物都是矩形),然后绘制两条新线,一条到障碍物的每个可见角。然后,我从这两个角到端点画线,并对路径的每个分支重复交叉测试。

我的问题是:如何在 Lua 中传播我的分支路径没有递归?使用递归似乎很容易,但如果我的路径太长,我不想冒堆栈溢出和崩溃的风险。

如果我使用的技术有技术术语,请告诉我。我喜欢尽可能自己做研究。

【问题讨论】:

    标签: recursion lua line path-finding


    【解决方案1】:

    有递归和迭代。 Lua 通过尾调用支持“无限递归”,所以如果你可以用尾调用来表达你的递归,就不会有堆栈溢出的风险。示例:

    function f(x) 
        if x==0 then return 0 end -- end recursion
        .... Do stuff ...
        return f(x-1)
    end
    

    在 Lua 中编程的第 6.3 节(可在线获取)讨论了这一点。

    如果您无法确定使用尾调用的方法,那么您必须使用迭代。例如从一条路径开始,使用while循环测试有多少交叉点(0时退出循环);循环调用一个计算两条新路径的函数;每个路径都被添加到一个列表中; while 循环在路径循环中(因为路径数增加);路径长度可以同时计算;一些路径将是死胡同,将被丢弃;有些将是周期性的,应该放弃;其余的将到达目的地。然后,您保留路径或旅行时间最短的那条(不一定相同)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-16
      • 2021-05-21
      • 1970-01-01
      • 2018-03-05
      • 1970-01-01
      • 2020-01-03
      • 1970-01-01
      相关资源
      最近更新 更多