如何旋转一个矢量2围绕另一个矢量2
本文关键字:另一个 何旋转 旋转 一个 | 更新日期: 2023-09-27 18:12:08
我正在制作一款游戏。这款游戏包括玩家从自上而下的角度操作机器人。移动,碰撞和射击都实现了。
然而,机器人有2个"手臂",从它发射武器,从这些手臂开火,我基本上设置了2个临时地点,为机器人开火,每一个手臂,包括在X方向的偏移+/- 15。当玩家往下看时,手臂射击很好,子弹似乎是从机器人的手臂中射出的,然而,当我让玩家转向Y轴向左或向右看时,机器人似乎是从身体内部射出子弹。我有一张图片来帮助说明这个问题
http://imageshack.us/photo/my-images/694/problemrs.png/正如你所看到的,左边和右边的弹丸刷出点都在正确的位置,直到机器人的身体被旋转。我想要做的是,旋转这两个Vector2的位置,围绕机器人的身体。红色方块表示弹丸的生成位置,白色方块表示我想要的生成位置。我试过一些旋转的方法,但没有一个有我之后的效果。
什么线索吗?
你可以用仿射变换…但是,在你的情况下,用基本的三角函数可能更容易。
设X
, Y
为机器人的位置。
设T
为机器人的旋转角度。
设DX
为机器人中心到"手臂"的距离。(另一只手臂使用-DX)。
ArmX
= (cos(T
) * DX
) + X
ArmY
= (sin (T
) * DX
) + Y
我想,你有一个机器人的前进方向和一个中心,那么
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;
看起来你正确地旋转了向量本身。您缺少的部分是,您需要将矢量的基础/尾部(它开始的地方)的位置编码为矢量并旋转它。