2010-07-22 60 views
26

我正在用javascript/canvas創建一個簡單的2D遊戲。 我需要找出某個對象相對於我的位置的角度。用Y軸倒數計算2點之間的度數

所以:說我在(10,10)和對象是在(10,5) - 這將導致90度(如正Y是向下,負Y高達) (10,10 )vs(10,15)將是270度。

我該怎麼辦?

+0

角度從哪裏看? – 2010-07-22 14:01:08

+0

我很困惑,你是如何決定角度的......你是否在整個時間都面向某個方向? – rownage 2010-07-22 14:02:28

+0

@rownage:除非我誤解,否則重點是確定從一個位置指向另一個位置的矢量的方向。 – 2010-07-22 14:33:21

回答

37

假設你在(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

6

如果你的座標爲(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)矢量在哪個象限內,並相應地進行調整。

+2

我真的很喜歡KennyTM的答案。 Math.atan2會知道你已經在哪個象限,所以你不用走最後一步。 – 2010-07-22 14:19:18

+0

我仍然發現這個答案有用,這是一個很好的選擇,因爲我想控制象限我的自我。 – Partack 2014-06-25 19:39:57

4

通俗地說:

function pointDirection(x1, y1, x2, y2) { 
    return Math.atan2(y2 - y1, x2 - x1) * 180/Math.PI; 
} 
1

在HTML5畫布的原點是左上角因此y軸從上增長到底部。所以,無論無論你是在單位圓上計算A點的角度中心(C)的你其實應該做這樣

angle = Math.atan2(Cy-Ay,Ax-Cx)

,你會得到你的結果在[範圍 - π,π]。

我不知道他們爲什麼沒有將畫布原點放在左下角。