0

角度(度)に基づいて弾丸を動かす方法を理解しようと、かなり長い時間を費やしました

ラジアンを次のように定義します。

public static double toRadians(int angle) {
        return (90.0 - angle) * (Math.PI / 180);
    }

これが実際に弾丸を動かすコードです。xMov と yMov は負になることがあり、ティックごとに現在の位置に追加されます。

ラジアンを実際に使用したことはありませんが、上記のコードで北を 0、東を 90 などにすることができました。これは私が望むものです。弾丸が正しい方向に進まない理由がわかりません。X は正しいように見えますが、Y は正しくありません。

double x= Math.cos(Utilities.toRadians(mvmtAngle));
double y= Math.sin(Utilities.toRadians(mvmtAngle));
xMov += x* 4;
yMov += y* 4;

ありがとう!- チップ

編集:度は細かく設定されています(入力から)

編集 2: レンダリング コード:

((Graphics2D)g).rotate(Utilities.toRadians(barrelAngle), xStart, yStart);
g.fillRect(xStart - 1, yStart, 2, BARREL_SIZE);
((Graphics2D)g).rotate(-(Utilities.toRadians(barrelAngle)), xStart, yStart);
4

1 に答える 1

1

おそらく問題は、画面上の +y 方向が下になっていることですが、+y を上にしたいのではないかと思います。関数toRadiansは 0 度を PI/2 ラジアンに変換します。これは画面上では下向きです。代わりにこの変換を使用してみてください。

public static double toRadians(int angle) {
    return (angle - 90.0) * (Math.PI / 180);
}

これは角度の符号を逆にするだけです。Math.cosは偶関数であるため、計算された座標には影響しませんがx、座標の意味が逆になりyます。

于 2013-06-17T03:03:39.927 に答える