回答
查找使用點積的兩個矢量之間的角度:
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. 如何將一個空對矢量推回到另一個矢量?
- 6. Actionscript 3 - 向另一個對象旋轉一個對象
- 7. 旋轉的物體面對另一個對象
- 8. 旋轉精靈面對一個點(cocos2d)
- 9. 逐漸旋轉一個對象來面對一個點?
- 10. 將平面從一個法線旋轉/翻譯到另一個
- 11. 旋轉矢量
- 12. 移動一個基於另一個對象旋轉的displayobject
- 13. 旋轉圍繞fabric.js另一個對象的另一個獨立的對象
- 14. 分配矢量另一個向量
- 15. 圍繞另一點旋轉一個點
- 16. 圍繞另一點旋轉一個點
- 17. 另一矢量
- 18. 如何旋轉一個UIView來面對一個點
- 19. 創建一個關於前向矢量的旋轉
- 20. 如何在DirectX中旋轉後獲得一個網格矢量?
- 21. 用四元數圍繞一個軸旋轉矢量
- 22. 從矢量方向獲得一個正確的旋轉
- 23. 根據X的旋轉移動一個矢量
- 24. 確定從一個平面到另一個平面的旋轉角度
- 25. 把矢量作爲子矢量到另一個向量R
- 26. 如何根據clojure中另一個矢量的值排序一個矢量
- 27. 從帶有一個分配器的矢量移動到另一個矢量
- 28. 將一個矢量的元素存儲到另一個矢量中
- 29. 如何從r中的另一個矢量中減去一個矢量
- 30. 部分分配矢量到另一個
這個問題太含糊。你是否希望以恆定的角速度(例如每秒一度)或以某種其他方式轉動?你的標題的大小是否意味着什麼?等 – ninjagecko