作者KawasumiMai (魔物を討つ者)
看板Flash
標題[問題] 請問這樣的角度算法錯誤在?
時間Sat Mar 19 17:01:37 2011
使用AS2.0
首先我的認知是
Flash的角度使用徑度
而且原點在正下方
因此
/|
/30| 這樣的話必須計算 -30/360*Math.PI*2 往右則是30/360*Math.PI*2這樣
接著
我需要宣告一個移動的軌跡速度
因此我給obj一個v(速度)和r(角度)
現在我需要做的事情是
某個目標物朝另一個目標物的"正下方"發射東西
決定角度
A
B
/θ|
_______C___________________________ 基準面
AB是目標物,C是A的正下方投影點
B要發射東西
我的初步想法是計算 (B.x-C.x)/(B.y-C.y) 這會是tanθ
然後Math.atan((B.x-C.x)/(B.y-C.y)) 這樣應該是θ值本身
所以我令obj.r=Math.atan((B.x-C.x)/(B.y-C.y))
接著物體移動是這樣的
obj.x+=obj.v*Math.sin(obj.r)/360*Math.PI*2
obj.y+=obj.v*Math.cos(obj.r)/360*Math.PI*2
接下來就有問題了,反正結果不如我預期
原本4/3應該會是tan53之類的東西
結果atan(4/3)之後出來的竟然不是53而是-0.9xxxxxxxxx
害我不知道該如何是好
有人知道盲點在哪嗎?(死
--
▼▼ ◥▇◣◣
▲◢◣▲ \ ╲ ◢◣▲ ◥█████◣ 川澄 舞
▲/‘ d▄▄▄◣ —
▲/‘ ─
◥██████▌ Kwawasumi Mai
▂▄▅▄■▄▄▄▄▄▆─
▼ ノ▅■ ───
▆██████
▇▆ ◢█▼ —
▇▆◢█▼ ──
◥██████ 力の覚醒.魔力放出
▲
▲ ▼▼ ◥██◤██▄
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.62.151.194
※ 編輯: KawasumiMai 來自: 61.62.151.194 (03/19 17:02)
1F:推 LPH66:因為 atan 出來的值單位已經是 radian 了.... 03/19 18:30
2F:→ LPH66:再來即使不管這個問題 你的 /180*Math.PI 也放錯地方了... 03/19 18:31
3F:→ KawasumiMai:請問哪邊有誤? 03/19 20:49
4F:推 peacedove:反過來 *180/pi 03/19 21:03
5F:→ peacedove:deg:rad = 180 : pi 你可以用比例去驗證你的算式 03/19 21:04
6F:→ peacedove:喔 我看錯了 你搞錯了 應該是向一樓說的 atan出來的 03/19 21:06
7F:→ peacedove:東西就是radian了 可是rotation吃的是degree 03/19 21:06
8F:推 peacedove:然後sin,cos是吃rad沒錯 可是你對sin /180*pi做什麼?? 03/19 21:09
9F:→ peacedove:啊 我沒注意是as2.0 r跟三角吃的東西一不一樣不確定 03/19 21:11
10F:→ peacedove:而且我不確定as2.0有沒有atan2,沒有的話 你用atan還要再 03/19 21:12
11F:→ peacedove:加上一堆判斷 atan出來的角度範圍應該是 +-2pi之間 03/19 21:13
12F:推 cjcat2266:AS2有atan2 03/20 00:38
13F:推 peacedove:上面又打錯 是正負pi/2 03/20 02:43
14F:推 LPH66:我二樓推的意思是 Math.sin(degree/180*Math.PI) 這樣... 03/20 07:43
15F:→ LPH66:也就是說 就算你的變數是度為單位也得這樣寫才行 03/20 07:43
16F:→ LPH66:那現在 atan 出來的值已經單位是 radian 了 03/20 07:43
17F:→ LPH66:那就直接 Math.sin(obj.r) 就行了.... 03/20 07:44
18F:→ KawasumiMai:感謝各位回覆,我再研究看看 03/21 11:14
19F:→ KawasumiMai:我成功了QQ 03/21 12:16