誘導弾の角度制限について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ジュンヤ

誘導弾の角度制限について

#1

投稿記事 by ジュンヤ » 15年前

ボスに誘導弾を打たせたいと思っています。
atan2を使って、ボスの弾と自機との角度を求めて誘導弾を作ったのですが、
誘導する角度がきつくて、そのまま自機の方向に向かってきてしまいます。
ある程度誘導する角度をゆるめてやる方法はないでしょうか?
以下のように書きました。よろしくお願いします。
void boss_shot_bulletH000(){
    int t=boss_shot.cnt%60,i;
    if(t == 0){
        bullet_way(boss.x, boss.y, 1, bossatan2(), 0, 2, 7, 0, 0);
    }
    for(i = 0; i < BOSS_BULLET_MAX; i++){
        if(boss_shot.bullet.flag > 0){
      boss_shot.bullet.angle = atan2(ch.y - boss_shot.bullet.y, ch.x - boss_shot.bullet.x);
    }
    }
}

nns

Re:誘導弾の角度制限について

#2

投稿記事 by nns » 15年前

DXライブラリ本家のサンプルプログラムのホーミングミサイルの部分を参考にされると良いと思います。

ジュンヤ

Re:誘導弾の角度制限について

#3

投稿記事 by ジュンヤ » 15年前

サンプルを見ても理解できませんでしたが、真似してみたらなんとかできました。
ありがとうございました。

Ma

Re:誘導弾の角度制限について

#4

投稿記事 by Ma » 15年前

もう遅いかもしれませんが。。。

boss_shot.bullet.angle = atan2(ch.y - boss_shot.bullet.y, ch.x - boss_shot.bullet.x);

double cross = (ch.x - boss_shot.bullet.x)*sin(boss_shot.bullet.angle)- (ch.y - boss_shot.bullet.y)*cos(boss_shot.bullet.angle);//sin(シータ)*距離 (-Pi/2 < θ < PI/2)
double dot = (ch.x - boss_shot.bullet.x)*cos(boss_shot.bullet.angle)+ (ch.y - boss_shot.bullet.y)*sin(boss_shot.bullet[i].angle);//cos(シータ)*距離 (0 < θ < PI)
double tan_ang = atan2(dot,cross);// (sin(シータ)*距離/cos(シータ)*距離) = tan(θ) より。 (-PI < θ < PI)
boss_shot.bullet[i].angle += tan_ang/2; //2 にはお好きな定数を代入。弾道のきつさを変数としてもいいかも。



なんて、内積と外積を利用した方法なんかもあったりします。
あ、チェックしていないので間違っている部分もあるかもです。
画像

閉鎖

“C言語何でも質問掲示板” へ戻る