Преобразовать угол в градусах в вектор
Я занимаюсь программированием игр. FWIW I 'Я использую XNA, но яЯ сомневаюсь, что это актуально.
Я хотел бы преобразовать градусы в вектор направления (то есть X и Y) с величиной 1.
Мое происхождение (0,0) в левом верхнем углу.
Так что я'Мне нравится 0 градусов, чтобы преобразовать в [0, -1]
Я подумал, что лучший способ сделать это - взять мое определение «Север / Вверх» и повернуть его, используя матрицу, но это, похоже, не работает.
Вот кодекс ...
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 предоставленных модульных теста вернутся?
Спасибо заранее.