回答
查找使用点积的两个矢量之间的角度:
heading . target = |heading|*|target|*cos(theta)
然后每一帧,使用旋转矩阵通过0.10*theta
旋转heading
。
这假设你有某种旋转矩阵。在2D中,这是一个明确定义的操作,但是在3D中它变得病态定义。 –
它在3D中完美定义为“沿着旋转轴旋转θ的矩阵”。 – ninjagecko
尽管如何选择特定的旋转轴?我记得最近试图解决这个确切的问题,但我不记得这是什么解决方案。 (在一个不相关的笔记中,我可能不应该试图在凌晨3点做数学) –
假设唯一重要的是方向heading
和targetHeading
,我们将假设所有矢量都被归一化。你也说过,你想这是真的:
dheadingDegrees/dt = angle(targetHeading,heading) degrees/sec in the direction of targetHeading
(至少这是我如何理解它,而不是“得到通过每帧10%接近,但永远不会到达目的地”)
为了得到确切的答案,你需要整合和一些数学。如果你想模拟它并得到一个精确的答案,你可能想要将它从“帧”中解耦出来,并根据所需的精度将其模拟为每秒100个时间间隔。
这样:
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
有时我希望堆栈溢出有数学格式。 –
- 1. 如何计算从一个矢量旋转到另一个矢量所需的角度?
- 2. 继另一个旋转的对象
- 3. 如何将一个空对矢量推回到另一个矢量?
- 4. 逐渐旋转一个对象来面对一个点?
- 5. 移动一个基于另一个对象旋转的displayobject
- 6. 旋转围绕fabric.js另一个对象的另一个独立的对象
- 7. 分配矢量另一个向量
- 8. 围绕另一点旋转一个点
- 9. 另一矢量
- 10. 如何旋转一个UIView来面对一个点
- 11. 创建一个关于前向矢量的旋转
- 12. 如何在DirectX中旋转后获得一个网格矢量?
- 13. 根据X的旋转移动一个矢量
- 14. 从矢量方向获得一个正确的旋转
- 15. 确定从一个平面到另一个平面的旋转角度
- 16. 从带有一个分配器的矢量移动到另一个矢量
- 17. 部分分配矢量到另一个
- 18. 在3D平面上旋转矢量
- 19. 在2D平面上旋转3D矢量
- 20. Javascript - 将大对象字面量转换为另一个对象字面量
- 21. 给定一个矢量,应用一个函数到另一个向量
- 22. webgl在一个坐标轴上围绕另一个对象旋转对象
- 23. R:一个矢量
- 24. 将矢量传递给另一个矢量?
- 25. 你如何在另一个矢量上反映矢量?
- 26. 基于另一个2D矢量排序2D矢量
- 27. Rodrigues相对于矢量的一组点的旋转
- 28. 围绕另一个CGPoint旋转CGPoint
- 29. CSS旋转,而在另一个元素
- 30. 旋转UIView指向另一个UIView
这个问题太含糊。你是否希望以恒定的角速度(例如每秒一度)或以某种其他方式转动?你的标题的大小是否意味着什么?等 – ninjagecko