0

私は(おそらく単純な)タスクを実行しています。このタスクでは、描画されたオブジェクトをユーザー制御の(描画された)ものに移動させたいと考えています。私が持っているのは、それぞれ Xp と Yp として定義されたプレーヤー X と Y 座標だけです。(トリガーの後、ここのコードには含まれていません) 'player-object' に移動する必要があるオブジェクトには、this.X と this.Y で定義された座標があります。

        int xDirection = Xp - this.X;
        int yDirection = Yp - this.Y;
        int angleInDegrees = (int)Math.Atan2(xDirection, yDirection);
        double radians = (Math.PI / 180) * angleInDegrees;
        double xTmp = 3 * Math.Cos(radians);
        int xSpeed = (int)xTmp;
        double yTmp = 3 * Math.Sin(radians);
        int ySpeed = (int)yTmp;
        Console.WriteLine(xDirection);
        Console.WriteLine(yDirection);
        Console.WriteLine(xSpeed);
        Console.WriteLine(ySpeed);
        Console.ReadLine();

これでは正しい数字が得られないので、何が間違っているのだろうと思っていました。

これについておそらく最も困難な点は、プレーヤー オブジェクトに移動する必要があるオブジェクトがすべての側面 (360 度) からアプローチされる可能性があるという事実ですが、利用可能なアプローチの角度はありません。

質問を締め切りたいと思います、ティム

4

2 に答える 2

1

あなたが見ている主な問題は次の行にあると思います:

int angleInDegrees = (int)Math.Atan2(xDirection, yDirection);

@catflier が述べたようにMath.Atan2、角度をラジアンで返します (つまり、0 から 2pi の範囲の数値)。ただし、小数点以下int切り捨てるキャストを実行します。したがって、角度が 45 度の場合、実際には ~0.785398 ラジアンが返されます。にキャストするintと、 に変わります0。同様に、90 度では ~1.570796 ラジアンであり、にキャストするint1. これは重大な丸め誤差です。コメントで述べたように、すべての型を double に変更し、可能な最後のポイントでのみ整数キャストを実行することを検討してください (オブジェクトは整数に基づいて配置されていると思います)。

于 2012-10-01T13:00:08.423 に答える
1

Math.Atan2 はラジアンで値を返すので、他の c# 三角関数も同様です。

double angle = Math.Atan2(yDirection, xDirection);

また、型キャストを 10 進数に強制するようにしてください。

3.0 * Math.Cos(radians);
于 2012-10-01T11:51:22.460 に答える