我正在使用UIAcceleration
进行轮换。我有相对的一面,相邻的一面,但我想计算tan-1(y / x)反褐色。
答案 0 :(得分:9)
出于两个原因,始终使用atan2(y,x)而不是atan(y / x)。 David Maymudes提到了一个问题(x = 0的问题)。另一个是atan2()处理从-π到+π的整个范围,而atan()只给出-π/ 2和+π/ 2之间的输出,并且不能区分(x,y)=( 2,2)和(x,y)=( - 2,-2),因为你在进行除法时丢失了符号信息,只将商y / x传递给atan()。
答案 1 :(得分:4)
标准C math.h函数可用:
#include <math.h>
...
float theta = atan2f(y, x);
...
答案 2 :(得分:3)
atan2(y, x)
与atan(y/x)
的内容相同,但它可以正确处理x = 0
(即垂直线向上或向下)没有处理正面vs的情况负无穷大。