我正在改编 Java 中 80 年代的经典 Boids 模拟。 它运行良好,但我正在尝试向行为添加新规则,迫使代理避免矩形(墙壁),我不确定如何做到这一点。
我看到了这个线程:
https://gamedev.stackexchange.com/questions/45381/wall-avoidance-steering
但是我对最终代码中使用的语法(如 partsList[j] -> 正常)以及如何获取代理和矩形之间的距离以及如何实际驱赶代理感到困惑。 不过这个公式是有道理的。 有人可以向我解释一下吗? 谢谢!
附言我一直在遵循这个伪代码,我也使用这个 Java 源代码作为参考。
编辑:好的,我知道为什么我对语法感到困惑,但是在编写墙壁回避规则时,我仍然一无所知。
啊,我记得 80 年代,还有boids 模拟......
通常在类似 boids 的转向行为中,这个想法是对代理的速度(动量)施加行为"转向力"。因此,实现任何给定的转向行为归结为找到一些几何结构,以生成指向您想要转弯方向的矢量。理想情况下,这些将是切向转向力(垂直于当前速度),因此转向与速度控制无关。
在避开墙的情况下(矩形可以被认为是四面墙),一般的想法是采用一个远离(垂直于)墙的向量。使用投影(点积),您可以分离出平行于速度矢量并垂直于速度矢量的力分量。垂直于代理速度的壁法线分量是将代理远离壁的转向力。
另一个方面是知道何时使用这种墙壁回避行为。一个有用的方法是选择一个时间范围,比如 2 秒,并决定代理是否会在该时间内撞墙。使用当前位置、速度和该时间值,您可以对代理在 2 秒内的位置进行简单的线性预测。如果它在该间隔内越过墙壁,那么它应该使用其墙壁回避行为。
有关更多信息,请在 GDC 99 论文中查找"遏制",和/或查看以下内容: http://natureofcode.com/book/chapter-6-autonomous-agents/https://gamedevelopment.tutsplus.com/series/understanding-steering-behaviors--gamedev-12732