我正在用javascript/canvas創建一個簡單的2D遊戲。 我需要找出某個對象相對於我的位置的角度。用Y軸倒數計算2點之間的度數
所以:說我在(10,10)和對象是在(10,5) - 這將導致90度(如正Y是向下,負Y高達) (10,10 )vs(10,15)將是270度。
我該怎麼辦?
我正在用javascript/canvas創建一個簡單的2D遊戲。 我需要找出某個對象相對於我的位置的角度。用Y軸倒數計算2點之間的度數
所以:說我在(10,10)和對象是在(10,5) - 這將導致90度(如正Y是向下,負Y高達) (10,10 )vs(10,15)將是270度。
我該怎麼辦?
假設你在(a,b)並且對象在(c,d)。那麼對象與你的相對位置是(x,y)=(c - a,d - b)。
然後,您可以使用Math.atan2()
function來獲得以弧度表示的角度。
var theta = Math.atan2(-y, x);
說明該結果是在範圍[-π,π]。如果您需要爲非負數,你必須添加
if (theta < 0)
theta += 2 * Math.PI;
和弧度轉換爲度,乘以180/Math.PI
。
如果你的座標爲(XME,YME)和它們的座標是(xThem,yThem),那麼你可以使用公式:
arctan((yMe-yThem)/(xThem-xMe))
通常它會是arctan((yThem-yMe)/(xThem-xMe))
,但在這種情況下, y軸的符號相反。
將弧度結果轉換爲度數乘以180/pi。
所以在JavaScript中,這將如下所示:Math.atan((yThem-yMe)/(xThem-xMe))*180/Math.PI
ATAN給出-pi/2和pi/2之間的值(即,-90度和90度之間)。但是你可以看看你的(xThem - xMe,yMe - yThem)矢量在哪個象限內,並相應地進行調整。
我真的很喜歡KennyTM的答案。 Math.atan2會知道你已經在哪個象限,所以你不用走最後一步。 – 2010-07-22 14:19:18
我仍然發現這個答案有用,這是一個很好的選擇,因爲我想控制象限我的自我。 – Partack 2014-06-25 19:39:57
通俗地說:
function pointDirection(x1, y1, x2, y2) {
return Math.atan2(y2 - y1, x2 - x1) * 180/Math.PI;
}
在HTML5畫布的原點是左上角因此y軸從上增長到底部。所以,無論無論你是在單位圓上計算A點的角度中心(C)的你其實應該做這樣
angle = Math.atan2(Cy-Ay,Ax-Cx)
,你會得到你的結果在[範圍 - π,π]。
我不知道他們爲什麼沒有將畫布原點放在左下角。
角度從哪裏看? – 2010-07-22 14:01:08
我很困惑,你是如何決定角度的......你是否在整個時間都面向某個方向? – rownage 2010-07-22 14:02:28
@rownage:除非我誤解,否則重點是確定從一個位置指向另一個位置的矢量的方向。 – 2010-07-22 14:33:21