2つの異なるタイプのこれらのエージェントがシミュレーションで動き回る捕食者/獲物タイプのシミュレーションをプログラムしようとしています。現在、エージェントが移動できる8つの可能な移動方向(右、前右、前など)があります。より自然に見えるようにするために、次のような角度ベースの動きを実装したいと思いました。
xPos+= speed * Math.cos(Math.toRadians(angle));
yPos+= speed * Math.sin(Math.toRadians(angle));
エージェントが互いにオーバーラップできないシミュレーションで、衝突検出がすでに実装されています。今私が直面している問題は、エージェントがブロックされている(他のエージェントによってボックス化されている)ために移動できないかどうかを確認する方法です。以前の8方向の移動では、次のいずれかで移動しようとしました。可能な8つの方向と、エージェントがその方向(衝突または境界)に移動できない場合は、可能な移動方向からその方向を削除して再試行します。移動方向が残っていない場合は、エージェントがボックスに入れられていることを意味します。
しかし、エージェントがボックスに入れられているかどうかを確認するにはどうすればよいですか?そうでない場合は、角度ベースの移動を実装する場合、次にどの角度の移動を選択する必要がありますか(確かに、可能な単一の移動角度を確認することは非常に非効率的です)、または単に固執する必要があります8方向の動き?
エージェントは、視界内で最も近い食べ物に向かって移動する瞬間、それ以外の場合は自由に歩き回ります。エージェントは、回転速度などに制限はありません(今のところ瞬時に回転できます)。