在android中给出方位角,俯仰和滚动的相对方向?

时间:2010-12-02 22:47:22

标签: android math orientation

当我在Android应用程序中听取方向事件时,我得到一个SensorEvent,它包含3个浮点数 - 相对于现实世界的轴的方位角,俯仰和滚转。

现在说我正在构建一个类似迷宫的应用程序,但我不想强迫用户通过电话并握住手机,使xy平面与地面平行。相反,我希望能够允许用户按照他们的意愿握住手机,放下或者坐下并以一定角度握住手机。换句话说,我需要根据用户的喜好校准手机。

我该怎么做?

另请注意,我相信我的回答与getRotationMatrixgetOrientation有关,但我不确定如何!

请帮忙!我被困在这几个小时。

2 个答案:

答案 0 :(得分:3)

对于Labyrinth风格的应用程序,您可能更关心加速度(重力)矢量而不是轴方向。在电话坐标系中,该向量由三个加速度计测量值的组合给出,而不是旋转角度。具体来说,只有 x y 读数会影响球的运动。

如果确实需要方向,则3个角度读数代表3个欧拉角。但是,我怀疑你可能并不真正需要角度本身,而是旋转矩阵 R ,它由 getRotationMatrix() API返回。一旦你有了这个矩阵,那么 基本上就是你正在寻找的校准。如果要将世界坐标中的矢量转换为设备坐标,则应将其乘以此矩阵的(在此特殊情况下,inv( R ) =转置( R )。

因此,按照我在文档中找到的示例,如果要将世界重力矢量 g ([0 0 g])转换为设备坐标,请将其乘以inv( - [R ):

g = inv( R )* g

(请注意,这应该会给你与读取加速度计相同的结果)

此处可能使用的API:矩阵类的 invertM() multiplyMV()方法。

答案 1 :(得分:0)

我不知道任何特定于Android的API,但你想要做的就是将方位角减少一定量,对吧?所以你将“原点”从(0,0,0)移动到他们想要的任何东西。在伪代码中:

myGetRotationMatrix:
    return getRotationMatrix() - origin