2012-06-23 94 views
2

因此,我正在使用JavaScript和畫布處理粒子發射器。
我希望能夠根據角度設置粒子發射的方向。根據度數計算方向

這可以用這個功能來完成:

y = Math.tan(45 * Math.PI/180); 

如果角度爲45等

但我不知道exacly我應該如何實現這一點,因爲像素計算它返回1有點不同。認爲-1每個步驟刪除一個像素,1個添加一個像素。

如果角度爲45°,則Y爲1且X爲1,這是正確的。
但是爲了得到在315度行進的像素,Y是-1並且X應該是1.
並且在225度時Y應該是-1(但是是1)並且X應該是-1。

函數應該如何工作?

下面是即時通訊思想的形象:
(發射器處於原點)

The emitter is in origin

+4

問題在哪裏? – totten

+0

如果你想要斜坡......並且像素有'x'和'y'的區別...那麼它只是'y/x'。 –

+0

將角度映射到第一象限,找出您的X和Y,然後相應地調整符號。 – Pointy

回答

1

其實這很簡單,

angle = (angle * Math.PI/180) % 360; 
tangent = Math.tan(angle); 

因爲你不知道在哪裏是x;

section_x_positive = (angle<90||angle>270?1:-1); 
section_y_positive = (angle>0&&angle<180?1:-1); 
x = abs(tangent) * section_x_positive; 
y = abs(tangent) * section_y_positive; 
+0

謝謝我會試試 – Patrik

+0

我改變了一下代碼,試試這個。再次更改:) – totten

+0

似乎並不像它應該那樣正常工作。如果角度爲45°則x爲0.9999,y爲-0.9999。但X不應該是1,所以應該是Y.下面是一個jsfiddle:http://jsfiddle.net/bzYje/ – Patrik

0

這聽起來我喜歡你的問題是,你正在考慮的方向,這是一個向量,就好像它是一個標量。

你必須記住,一個2D矢量被表示爲兩個分量:

enter image description here

enter image description here

可以以單位矢量來工作,因此幅度R = 1

所以,如果你有一個方向角,它應該以弧度來衡量,逆時針方向增加,並且從x = 0橫軸開始,你最終會得到兩個分量單位矢量指向你想要的方向。