我正在尝试编写一个捕食者/猎物类型的模拟,其中两种不同类型的这些代理在模拟中四处移动。现在我有 8 个可能的移动方向(向右、向前、向右、向前等),代理可以进入。为了让它看起来更自然,我想像这样实现基于角度的运动:
xPos+= speed * Math.cos(Math.toRadians(angle));
yPos+= speed * Math.sin(Math.toRadians(angle));
我已经在模拟中实现了碰撞检测,其中代理不能相互重叠。现在我面临的问题是我如何检查我的代理是否已被阻止(被其他代理限制)并因此无法移动。通过之前的 8 向移动,我所做的是尝试移动其中一个八个可能的方向,如果代理无法在该方向移动(碰撞或边界),则从可能的移动方向中删除该方向并重试。一旦没有留下任何移动方向,则意味着代理已被框住。
但是我如何检查代理是否已被装箱,如果不是,如果我要实现基于角度的移动(肯定检查单个可能的移动角度是非常低效的),它应该选择哪个移动角度。或者我应该坚持8向运动?
目前代理向视野中最近的食物移动,否则它自由漫游。代理对它可以转动的速度等没有限制(现在可以立即转动)。