作者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