如何在XNA中找到旋转变换的2D坐标?

时间:2009-08-01 19:38:33

标签: c# graphics xna 2d

我正在制作一个XNA游戏并遇到一个小问题,想出一些矢量数学。

我有一个表示具有X和Y整数坐标以及旋转浮点数的2D对象的类。我需要的是为Position获取一个Vector2属性,并将X和Y设置为使用Rotation float转换的Vector2。这样我就可以做类似的事情了。

Position += new Vector2((thumbstick.X * scrollSpeed), -(thumbstick.Y * scrollSpeed));

并且物体将沿着它自己的向上方向移动,而不是向上移动方向。

到目前为止,这就是我所拥有的...我认为该设置是正确的,但是对于+ =更改它需要得到一个并且答案现在不是来找我...>。> ;

public Vector2 Position
{
    get
    {
        // What goes here? :S
    }
    set
    {
        X = value.X * (int)Math.Cos(this.Rotation);
        Y = value.Y * (int)Math.Cos(this.Rotation);
    }
}

3 个答案:

答案 0 :(得分:7)

不,两者都不正确。

2D矢量转换如下:

x' =  x*cos(angle) - y*sin(angle)
y' =  x*sin(angle) + y*cos(angle)

其中角度以弧度为单位,零角度沿正x轴,并且当您围绕z轴旋转离开平面时沿逆时针方向增加。旋转中心位于被变换的矢量的末尾,因此想象一下原点位于(0,0)的矢量,以(x,y)旋转一个角度结束,直到它成为原点位于(0,0的矢量) )并以(x',y')结束。

答案 1 :(得分:3)

您还可以使用Matrix辅助方法创建Z旋转矩阵,然后将矢量乘以此旋转矩阵。像这样:

Vector v1;
Matrix rot = Matrix.CreateRotationZ(angle);
Vector v2 = v1 * rot;

答案 2 :(得分:1)

我认为这是一个坏主意。将所有对象的X和Y坐标保持在相同的平面中,而不是每个都有自己的轴。无论如何都要有PositionHeading属性,并考虑使用Move方法获取输入向量并进行数学计算以更新位置和标题。