【问题标题】:Rectangle Avoidance in BoidsBoids 中的避免矩形
【发布时间】:2018-04-22 01:34:07
【问题描述】:

我正在改编 80 年代 Java 中的经典 Boids 模拟。它工作得很好,但我正在尝试向行为中添加一条新规则,以迫使代理避开矩形(墙),我不知道该怎么做。

我看过这个帖子:

https://gamedev.stackexchange.com/questions/45381/wall-avoidance-steering

但是我对最终代码中使用的语法(如partsList[j] -> normal)以及如何获得代理和矩形之间的距离以及如何实际驱走代理感到困惑。不过这个公式是有道理的。有人可以向我解释一下吗?非常感谢!

附:我一直在关注this 伪代码,也参考了this Java 源代码。

编辑:好的,我明白为什么我对语法感到困惑了,但是在编写避免墙规则时我仍然一无所知。

【问题讨论】:

  • 您对语法感到困惑,因为链接的线程是 C++,而不是 Java。

标签: java algorithm rectangles boids


【解决方案1】:

啊,我记得 80 年代,和 boids 模拟......

通常在类似 boids 的 steering behaviors 中,这个想法是对代理的速度(动量)施加行为“转向力”。因此,实现任何给定的转向行为归结为找到一些几何构造,该构造生成指向您想要转向的方向的向量。理想情况下,这些将是切向转向力(垂直于当前速度),因此转向独立于速度控制。

在避免一堵墙的情况下——一个矩形可以被认为是四堵墙——一般的想法是取一个远离(垂直于)墙的向量。使用投影(点积),您可以分离出与速度矢量平行和垂直的力分量。垂直于智能体速度的壁面法线分量是一个转向力,它将使智能体远离壁面。

另一方面是知道何时使用这种回避行为。一个有用的方法是选择一个时间范围,比如 2 秒,并决定代理是否会在这段时间内碰壁。使用当前位置、速度和时间值,您可以对代理在 2 秒内的位置进行简单的线性预测。如果它在这段时间内穿过墙壁,那么它应该使用它的墙壁回避行为。

有关更多信息,请在 GDC 99 paper 中查找“遏制”,和/或查看以下内容: http://natureofcode.com/book/chapter-6-autonomous-agents/ https://gamedevelopment.tutsplus.com/series/understanding-steering-behaviors--gamedev-12732

【讨论】:

    猜你喜欢
    • 2021-07-24
    • 2014-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多