我正在做一些游戏编程。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 个单元测试路径?
提前谢谢了。