iPhone上使用加速计无法理解倾斜角度计算的问题

3
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度(以弧度表示)?

我似乎无法在图表上想象发生了什么。如果有人能为我解惑,那将不胜感激。


我不了解iPhone或其坐标系统,但第1行和第2行与倾斜角一致,当rZ=0且rX<0时为0,当rZ>0且rX=0时为pi/2,当rz<0且rX=0时为-pi/2。但这与剩下的两行不一致。 - Beta
1个回答

0

我认为这些+90度或-90度(在负rollingZ的情况下)被添加是为了将倾斜值带到广泛使用的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度。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接