ゲームプログラミングをやっています。FWIW私はXNAを使用していますが、これが関連しているかどうかは疑わしいです。
度を大きさ 1 の方向ベクトル (つまり、X と Y) に変換したいと思います。
私の原点 (0,0) は左上にあります。
だから、0度を[0、-1]に変換したい
これを行う最善の方法は、North/Up の定義を取り、マトリックスを使用して回転させることだと思いましたが、これは機能していないようです。
これがコードです...
public class Conversion
{
public static Vector2 GetDirectionVectorFromDegrees(float Degrees)
{
Vector2 North= new Vector2(0, -1);
float Radians = MathHelper.ToRadians(Degrees);
var RotationMatrix = Matrix.CreateRotationZ(Radians);
return Vector2.Transform(North, RotationMatrix);
}
}
...そしてここに私の単体テストがあります...
[TestFixture]
public class Turning_Tests
{
[Test]
public void Degrees0_Tests()
{
Vector2 result = Conversion.GetDirectionVectorFromDegrees(0);
Assert.AreEqual(0, result.X);
Assert.AreEqual(-1, result.Y);
}
[Test]
public void Degrees90_Tests()
{
Vector2 result = Conversion.GetDirectionVectorFromDegrees(90);
Assert.AreEqual(1, result.X);
Assert.AreEqual(0, result.Y);
}
[Test]
public void Degrees180_Tests()
{
Vector2 result = Conversion.GetDirectionVectorFromDegrees(180);
Assert.AreEqual(0, result.X);
Assert.AreEqual(1, result.Y);
}
[Test]
public void Degrees270_Tests()
{
Vector2 result = Conversion.GetDirectionVectorFromDegrees(270);
Assert.AreEqual(-1, result.X);
Assert.AreEqual(0, result.Y);
}
}
私はこれにすべて間違って近づいていますか?マトリックスを使用する必要がありますか? 間違った場所で度からラジアンに変換してしまったのでしょうか?
次のようなコードを使用してこれを実行できるという提案を見てきました。
new Vector2((float)Math.Cos(Angle), (float)Math.Sin(Angle));
...または時々...
new Vector2((float)Math.Sin(Angle), (float)Math.Cos(Angle));
ただし、これらも機能しないようです
誰かが私を正しい道に導くことができますか...または、提供された4つの単体テストをパスさせるコードを教えてください。
よろしくお願いします。