无法在iPhone上使用Accelerometer了解倾角计算的角度

时间:2012-03-12 19:24:27

标签: iphone objective-c math accelerometer

double = rollingZ  = acceleration.x;
double = rollingX = acceleration.y;

if (rollingZ > 0.0) {
    self.centerCoordinate.inclination = atan(rollingX / rollingZ) + M_PI / 2.0; //LINE 1
} 
else if (rollingZ < 0.0) {
    self.centerCoordinate.inclination = atan(rollingX / rollingZ) - M_PI / 2.0; // LINE 2
} 
else if (rollingX < 0) {
    self.centerCoordinate.inclination = M_PI/2.0; //atan returns a radian
} 
else if (rollingX >= 0) {
    self.centerCoordinate.inclination = 3 * M_PI/2.0;

我只想完全理解这段代码。我正在寻找在iphone上构建AR应用程序,此代码具有使用加速度计读数计算设备倾斜角度的功能。

我的理解是:

如果我向前滚动设备,假设纵向方向,则加速度计的x轴朝向-1.0的负数增加(即,设备在屏幕朝上的情况下平放)。如果我向我倾斜设备,x轴值会增加到1.0(直到设备面向地面平坦)。

y轴在-1.0和0.0之间上下移动(0表示设备是水平的)。

如果我们采取一些示例读数,说x = 0.5(-45度角,将设备倾向我),y = 0.8。如果我把它绘制在笛卡尔坐标图上,其中y(rollingX作为垂直轴)和x(rollingZ作为水平)并在它们之间画一条线,我明白我可以使用反正切函数(atan)来计算角度。我的困惑出现在第1行。我不明白为什么那条线将90度(弧度)加到atan函数给出的计算角度?

我似乎无法想象一下正在发生的图表。如果有人能够对此有所了解 - 那将非常感激。

1 个答案:

答案 0 :(得分:0)

我认为这些+90度或-90度(在负滚动Z的情况下)被添加以使倾斜值为广泛使用的Polar coordinate system,角度在-180和180度之间。 假设当你看到设备的屏幕并且Z线从屏幕上看着你时,Z线向上投射,计算结果将在屏幕平面和水平面之间给出一个角度。

让我们假设加速度值在设备“内部”时是正的:

1)设备处于垂直位置,我们有rollingZ = 1,rollingX = 0.代码返回90度。

2)设备向用户倾斜。让rollingZ为0.7,rollingX为-0.7。这将给我们45度角。

3)设备处于倒置位置,现在我们有rollingZ = -1和rollingX = 0,它是-90度。