【问题标题】:Cant Understand Angle of Inclination Calculation using Accelerometer on iPhone无法理解在 iPhone 上使用加速度计计算倾角
【发布时间】: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


【解决方案1】:

我假设添加这些 +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度。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-28
    • 1970-01-01
    • 2011-01-08
    • 1970-01-01
    • 1970-01-01
    • 2011-09-28
    相关资源
    最近更新 更多