Math 将一个矢量旋转到另一个矢量,但要缓慢?

Math 将一个矢量旋转到另一个矢量,但要缓慢?,math,language-agnostic,vector,rotation,Math,Language Agnostic,Vector,Rotation,我有两个向量:标题和目标。我如何通过某种因素将航向转向面对目标?说每帧10%什么的 社区编辑:目标向量不断变化。 谢谢 使用点积求两个向量之间的角度: heading . target = |heading|*|target|*cos(theta) 然后每一帧,使用旋转矩阵将标题旋转0.10*theta。假设唯一重要的是标题的方向和目标标题,我们将假设所有向量都是标准化的。你也说过你希望这是真的: dheadingDegrees/dt = angle(targetHeading,heading

我有两个向量:
标题
目标
。我如何通过某种因素将航向转向面对目标?说每帧10%什么的

社区编辑:目标
向量不断变化。


谢谢

使用点积求两个向量之间的角度:

heading . target = |heading|*|target|*cos(theta)

然后每一帧,使用旋转矩阵将
标题
旋转
0.10*theta

假设唯一重要的是
标题的方向
目标标题
,我们将假设所有向量都是标准化的。你也说过你希望这是真的:

dheadingDegrees/dt = angle(targetHeading,heading) degrees/sec in the direction of targetHeading
(至少我是这样理解的,而不是“每帧都接近10%,但从未到达目的地”)

要得到准确的答案,你需要积分和一些数学知识。如果你想模拟它并得到一个精确的答案,你可能想把它从“帧”中分离出来,然后根据所需的精度每秒模拟100次

因此:


这假设您有某种旋转矩阵。在2D中,这是一个定义良好的操作,但在3D中,它变得定义不清。在3D中,它被完美地定义为“沿旋转轴以θ旋转的矩阵”。但如何选择特定的旋转轴?我记得最近试图解决这个问题,但我不记得解决这个问题的方法是什么。(另一方面,我可能不应该在早上3点做数学)对于3D,旋转轴可以通过航向和目标之间的叉积来选择(
a x b
将是与
a
b
正交的向量)。这个问题太模糊了。您想以恒定角速率转动(例如,每秒一度),还是以其他方式转动?你的航向有什么意义吗?等
every time interval dt:
 target = getCurrentTarget()
 rotationSpeed = angleBetween(target,currentHeading)/(1second)
 heading = {rotate heading by dt*rotationSpeed radians towards target}
            ^-------- for how to do this, see below ----------------^

to rotate a vector v1 to v2 from time t=0 to t=1, with constant angular velocity:
 v1normalized = normalized(v1)
 v2perpNormalized = normalized(v2 - v2*v1normalized)
 animated = cos(t*pi/2)*v1normalized + sin(t*pi/2)*v2perpNormalized