如何围绕另一个vector2旋转vector2?

时间:2011-10-20 21:29:59

标签: c# xna rotation

我目前正在制作游戏。他的游戏包括从上到下的角度操作机器人的玩家。运动,碰撞和射击都已实施。

然而,机器人有2个“臂”从中发射武器,从这些武器射击我基本上设置了2个临时位置供机器人射击,每个手臂一个,包括一个偏移X方向+/- 15.当玩家向下看时,手臂射得很好并且子弹似乎是从机器人手臂伸出来的,然而,当我转动玩家向Y轴的左侧或右侧看时,似乎机器人正在从其体内射击子弹。我有一张图片来帮助说明问题

http://imageshack.us/photo/my-images/694/problemrs.png/

如您所见,左右抛射物生成点位于正确的位置,直到机器人身体旋转。我想要做的是在机器人身体周围旋转那2个Vector2位置。红色块显示射弹产生的位置,白色块代表我想要产卵位置的位置。我已经尝试了一些旋转方法,但是之后都没有效果。

任何线索?

3 个答案:

答案 0 :(得分:4)

你可以用仿射变换做到这一点......但是,在你的情况下,用基本的trig来做它可能更容易。

LET XY是机器人的位置。

LET T是机器人的旋转角度。

LET DX是机器人中心到“手臂”的距离。 (对另一只手臂使用-DX)。

ArmX =(cos(T)* DX)+ X

ArmY =(罪(T)* DX)+ Y

答案 1 :(得分:1)

我想,你有一个前进方向和机器人的中心,然后

 F = forward vector
 c = center point
 d = distance from center to arms

 NF = normal to forward

 NF = new Vector2(F.Y, -F.X);

 NF.Normalize();

 LeftArmShootOrigin = c + NF * d;
 RightArmShootOrigin = c - NF * d;

答案 2 :(得分:0)

看起来你正在正确地旋转矢量。您缺少的部分是您需要将矢量的基/尾的位置(它开始的位置)编码为矢量并旋转它。