如何旋转一个矢量2围绕另一个矢量2

本文关键字:另一个 何旋转 旋转 一个 | 更新日期: 2023-09-27 18:12:08

我正在制作一款游戏。这款游戏包括玩家从自上而下的角度操作机器人。移动,碰撞和射击都实现了。

然而,机器人有2个"手臂",从它发射武器,从这些手臂开火,我基本上设置了2个临时地点,为机器人开火,每一个手臂,包括在X方向的偏移+/- 15。当玩家往下看时,手臂射击很好,子弹似乎是从机器人的手臂中射出的,然而,当我让玩家转向Y轴向左或向右看时,机器人似乎是从身体内部射出子弹。我有一张图片来帮助说明这个问题

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

正如你所看到的,左边和右边的弹丸刷出点都在正确的位置,直到机器人的身体被旋转。我想要做的是,旋转这两个Vector2的位置,围绕机器人的身体。红色方块表示弹丸的生成位置,白色方块表示我想要的生成位置。我试过一些旋转的方法,但没有一个有我之后的效果。

什么线索吗?

如何旋转一个矢量2围绕另一个矢量2

你可以用仿射变换…但是,在你的情况下,用基本的三角函数可能更容易。

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;

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