当我在Android应用程序中听取方向事件时,我得到一个SensorEvent,它包含3个浮点数 - 相对于现实世界的轴的方位角,俯仰和滚转。
现在说我正在构建一个类似迷宫的应用程序,但我不想强迫用户通过电话并握住手机,使xy平面与地面平行。相反,我希望能够允许用户按照他们的意愿握住手机,放下或者坐下并以一定角度握住手机。换句话说,我需要根据用户的喜好校准手机。
我该怎么做?
另请注意,我相信我的回答与getRotationMatrix
和getOrientation
有关,但我不确定如何!
请帮忙!我被困在这几个小时。
答案 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