0

私が入れた角度で弾丸を発射しようとすると、いくつかの問題が発生しました。JavaでEclipseを使用しています。

私のコード:

x += (int) (spd * Math.cos(dir));
y -= (int) (spd * Math.sin(dir));`

それが機能しない理由のような感じは、それが int にキャストされているため、不正確になる可能性があるためです。ただし、長方形を描画するにはintが必要です。

dir に 0 を入力すると問題なく、右に撃ちます。問題は、私が 90 を入れると、真っ直ぐに撃つ代わりに、少し左に撃ってしまうことです。

これを修正する方法について何か考えはありますか? ありがとう!

4

4 に答える 4

5

いいえ、あなたは典型的な間違いを犯しています: Java 三角関数には、度数ではなくラジアンが必要です。合格すべきは 90 ではありません。π/2.0 です。

そのため、必ず π/180.0 を掛けて角度をラジアンに変換してください。

これは、C、C++、Java、JavaScript、C#、および私が知っている他のすべての言語に当てはまります。角度に度数を使用する言語を1 つ挙げることはできません。

double radians = dir*Math.PI/180.0;
x += (int)(spd*Math.cos(dir));
y -= (int) (spd * Math.sin(dir));`  // I don't know why you do this.  Funny left-handed coordinate system.

速度は、速度ベクトルの大きさです。方程式は、書かれているように、速度を (vx, vy) 成分として表すだけです。

変位が必要な場合は、時間ステップを掛ける必要があります。

vx = speed*Math.cos(angle);
vy = speed*Math.sin(angle);
dx = vx*dt;
dy = vy*dt;
x += dx;  // movement in x-direction after dt time w/ constant velocity
y += dy;  // movement in y-direction after dt time w/ constant velocity

加速度が関係している場合 (重力など)、時間の経過に伴う速度の変化を同じ方法で計算する必要があります。

于 2013-07-11T01:26:25.963 に答える