#8
by usao » 6年前
要は,
移動量の大きさVと,atan2で求めた角度θから移動ベクトル(Vx,Vy)を
Vx = V * cos(θ)
Vy = V * sin(θ)
として求めたとき,このVx,Vyをintに丸めてしまうために,0になってしまう,という事が問題ということですよね.
(という話であれば,
> 角度が0となって
とか
> つまりcos(ーπ<π)の値が非常に小さな値、角度にならない場合は0としてキャストされてしまうため
という文言にならない気がするので,違うのかもですけど.
角度θがintに丸められるわけじゃないし,
cos(θ)やsin(θ)の値が小さいことが根本原因であるわけでもない.(cosとsinは常に絶対値が1以下なのだし)
)
問題の内容が上記であるならば,
> 方向ベクトルを求めればいい
というのは,「問題への解決策」ではないように思います.
(「一旦,角度θをわざわざ求めている」ことが問題の要因になっているわけでないならば,
Vx,Vyを(atan2を用いない)別の手段で算出するようにしたとしても,
「それをintに丸めたら0になるかもしれない」 という問題への対処ではない.)
解決策は,別に指摘されている
「内部計算結果はintに丸めずに保持すればいいよね」
の側ですよね.
要は,
移動量の大きさVと,atan2で求めた角度θから移動ベクトル(Vx,Vy)を
Vx = V * cos(θ)
Vy = V * sin(θ)
として求めたとき,このVx,Vyをintに丸めてしまうために,0になってしまう,という事が問題ということですよね.
(という話であれば,
> 角度が0となって
とか
> つまりcos(ーπ<π)の値が非常に小さな値、角度にならない場合は0としてキャストされてしまうため
という文言にならない気がするので,違うのかもですけど.
角度θがintに丸められるわけじゃないし,
cos(θ)やsin(θ)の値が小さいことが根本原因であるわけでもない.(cosとsinは常に絶対値が1以下なのだし)
)
問題の内容が上記であるならば,
> 方向ベクトルを求めればいい
というのは,「問題への解決策」ではないように思います.
(「一旦,角度θをわざわざ求めている」ことが問題の要因になっているわけでないならば,
Vx,Vyを(atan2を用いない)別の手段で算出するようにしたとしても,
「それをintに丸めたら0になるかもしれない」 という問題への対処ではない.)
解決策は,別に指摘されている
「内部計算結果はintに丸めずに保持すればいいよね」
の側ですよね.