• 締切済み

追跡のアルゴリズム

どこで質問したらいいかわからないのですが,C++で実装してるのでここに書いてみます.適切なカテゴリーがありましたら教えてくださると助かります. ゲーム開発者のためのAI入門(http://www.amazon.co.jp/exec/obidos/ASIN/4873112168/)という本でちょっとずつ勉強してます.追跡のアルゴリズムのところでうまくいかないところがあります. 直線的に移動するターゲットを捕食者(プレデター)に追跡させようとしています.時間刻みを適当にとって座標や速度,プレデターの向き(+y軸からの角度)を更新するように計算しています. 問題はプレデターの回転のところです. ターゲットの座標をプレデターのローカル座標に変換して,プレデターの進行方向(ローカル座標の+y軸方向)からみてどちら側にターゲットがいるか(ローカル座標の+x,または-x)という情報からプレデターにトルクを与えます.慣性モーメントなどは適当に決めています. 確かにターゲットがいる方向へ回転するのですが,ターゲットを正面に捕らえたころには角速度が大きすぎて回りすぎてしまい,うまく向きを制御できません. 一定の角度で回るようにすればもちろんターゲットを正面に捕らえて直進してくれるのですが,それでは旋回のしかたが現実的でない感じがします.回転はあくまでトルクで実現したいです. ターゲットを正面に捕らえるころには角速度をゼロに近づけるようにするにはどういった手段があるでしょうか.イメージとしては逆噴射みたいな感じで逆方向の角加速度を与えてあげればいいのかとも思いますが... 説明がうまくできなかったのでわかりづらいかと思いますが,よろしくお願いします. 意味がわからないことがあったらきいてくださればすぐに書きます.

みんなの回答

  • kacchann
  • ベストアンサー率58% (347/594)
回答No.2

>一定の角度で回るようにすればもちろん >ターゲットを正面に捕らえて直進してくれるのですが, >それでは旋回のしかたが現実的でない感じがします. >回転はあくまでトルクで実現したいです. 「追跡のアルゴリズム」以前に、 まず「走行する乗り物」を物理学的にどうシミュレートするべきなのか の問題だと思うので、 物理学のカテで質問したほうがいいかも。 なんか専門知識が要りそう。 ひょっとしたら 「猫」「自動車」「ボート」「ミサイル」「ホバークラフト」では それぞれ状況が異なるのかも? (専門知識がないので僕にはわかりません)

mago83
質問者

お礼

確かにその通りですね. ありがとうございます.

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

修正量が1(100%の修正量の意)である時に1そのままを与えると、実際の方向を向いた時に大きすぎて行き過ぎてしまいます。 なので、修正量が1の時その半分を修正量を与えて、 半分の位置に来たときにまたその時の修正量を1としてその半分を修正量として与えるというように半量修正で修正量を付与します。 (1/2ずつの修正は、収束するので、いずれ一致します)

関連するQ&A