关于旋转的矢量运动

时间:2012-03-21 15:39:46

标签: vector rotation trigonometry

假设我有一个向量(x,y)并且它通过旋转与原点对齐(例如,向上指向30度)。

如果我想将该向量相对于方向移动一个单位(因此,一个单位向前朝向30度),我将如何进行此操作?

我正在努力将一个简单的第三人称游戏放在一起,我希望能够旋转角色并将其向前移动而不管轮换如何,我对于如何做到这一点感到很失落。

编辑:

在回答了这个问题之后,我继续探究如何进行向后,向左和向右移动,所以我想如果有人需要帮助的话,我会把它粘在这里作为参考。

鉴于Gunther2的代码, 要获得向后运动,只需从当前位置减去位移:

position -= displacement;

要获得左侧运动,请将位移变量更改为

displacement.x = (float)Math.Sin(angle + PI/2); 
displacement.y = (float)Math.Cos(angle + PI/2);

如果Sin / Cos接受度数而不是弧度,则将PI / 2替换为90.

然后减去位移:

position -= displacement;

要获得正确的动作,只需按照相同的步骤添加新的位移:

position += displacement;

1 个答案:

答案 0 :(得分:4)

首先你需要一个代表角度的矢量:

Vector2 displacement;
displacement.x = (float)Math.Sin(angle);
displacement.y = (float)Math.Cos(angle);

然后,由于此向量(x,y)的长度始终为1,因此将其乘以您行进的距离。如果你想旅行1,那么X和Y已经是他们需要的尺寸了。

displacement *= speed;  // Assuming your Vector2 *= operator supports a scalar

将位移添加到当前位置:

position += displacement;