我正在制作一个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);
}
}
答案 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坐标保持在相同的平面中,而不是每个都有自己的轴。无论如何都要有Position
和Heading
属性,并考虑使用Move
方法获取输入向量并进行数学计算以更新位置和标题。