Converte um ângulo em graus para um vetor
Eu estou fazendo alguns programas de jogos. FWIW Estou usando o XNA, mas duvido que isso seja relevante.
Eu gostaria de converter graus para um vetor direcional (ou seja, X e Y) com magnitude 1.
Minha origem (0,0) está no canto superior esquerdo.
Então, eu gostaria de 0 graus para converter para [0, -1]
Eu pensei que a melhor maneira de fazer isso era pegar minha definição de North / Up e girá-la usando uma matriz, mas isso não parece estar funcionando.
Aqui está o código ...
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);
}
}
... e aqui estão os meus testes de unidade ...
[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);
}
}
Estou me aproximando disso tudo errado? Eu deveria estar usando uma matriz? Eu estraguei tudo e converti de graus para radianos no lugar errado?
Eu vi sugestões de que isso pode ser feito usando código como:
new Vector2((float)Math.Cos(Angle), (float)Math.Sin(Angle));
... ou às vezes ...
new Vector2((float)Math.Sin(Angle), (float)Math.Cos(Angle));
No entanto, estes não parecem funcionar
Alguém pode me colocar no caminho certo ... ou melhor ainda, dar-me algum código que faz com que os 4 testes unitários fornecidos trafeguem?
Muito obrigado antecipadamente.