Sin*_*gee 6 performance trigonometry
我读过,当我知道 Y 和 X 时,最好通过计算atan2(y,x)来获取角度,而不是使用带有 asin 和 acos 的单个值。我试图深入研究math.hlib 但没有找到任何公式。
有人可以解释为什么atan2更好吗?
theta = atan2(y,x);\nRun Code Online (Sandbox Code Playgroud)\n\n比以下更简单:
\n\nfloat in = 1.0/sqrt(x*x+y*y);\ntheta = acos(x*in);\nif(y<0)\n theta = -acos(x*in);\nelse\n theta = acos(y*in);\nRun Code Online (Sandbox Code Playgroud)\n\n你不觉得吗?它更简单,而且可能更快,具体取决于实现。
\n\n现在,如果 x 和 y 不是任意的,但如果您可以假设 x\xc2\xb2+y\xc2\xb2=1 且 y>=0,那么
\n\ntheta = acos(x);\nRun Code Online (Sandbox Code Playgroud)\n\n比atan2 更简单,而且可能更快。但同样,速度随实现的不同而变化。atan2 可能会也可能不会使用 acos 和 asin 来实现,或者使用更快的算法。
\n