Konvertieren Sie einen Winkel in Grad, um einen Vektor

Mache ich ein Spiel Programmieren. FWIW bin ich mit XNA, aber ich bin zweifelhaft, ob dies relevant ist.

Ich würde gerne konvertieren Grad zu einem Richtungs-Vektor (dh X und Y) mit dem Ausmaß 1.

Mein Ursprung (0,0) in der oberen linken.

Also möchte ich die 0-Grad-konvertieren auf [0, -1]

Ich dachte, der beste Weg, dies zu tun war meine definition von Norden/Oben und drehen Sie es mit einer matrix, aber dies scheint nicht zu funktionieren.

Hier ist der Code...

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);
    }
}

... und hier sind meine unit-tests...

[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);
    }

}

Bin ich nähert sich diese alle falsch?
Soll ich mich mit einer matrix?
Habe ich Mist gebaut und konvertiert von Grad in Bogenmaß an der falschen Stelle?

Ich habe schon Vorschläge gesehen, diese kann getan werden, mithilfe von code wie:

new Vector2((float)Math.Cos(Angle), (float)Math.Sin(Angle));

...oder manchmal...

new Vector2((float)Math.Sin(Angle), (float)Math.Cos(Angle));

Aber diese scheinen nicht zu funktionieren, entweder

Kann jemand mich auf den richtigen Weg... oder noch besser: geben Sie mir einige code, der bewirkt, dass die 4 bereitgestellten unit-tests auf Pfad?

Vielen Dank im Voraus.

InformationsquelleAutor Rory Becker | 2013-09-17

Schreibe einen Kommentar