【发布时间】:2012-03-29 05:31:55
【问题描述】:
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 行。我不明白为什么该行在 atan 函数给出的计算角度上增加了 90 度(以弧度为单位)?
我似乎无法在图表上可视化发生了什么。如果有人能对此有所了解 - 那将不胜感激。
【问题讨论】:
-
我不知道 iPhone 或它的坐标系,但是第 1 和第 2 行与倾斜角一致,当 rZ=0 和 rX0 时为 pi/2并且 rX=0,当 rz
标签: iphone objective-c math accelerometer