当我在Android应用程序中听取方向事件时,我得到一个SensorEvent,它包含3个浮点数 – 相对于现实世界的轴的方位角,俯仰和滚转.
现在说我正在构建一个类似迷宫的应用程序,但我不想强迫用户通过电话并握住手机使xy平面与地面平行.相反,我希望能够允许用户按照他们的意愿握住手机,放下或者坐下并以一定角度握住手机.换句话说,我需要根据用户的喜好校准手机.
我怎样才能做到这一点?
另请注意,我相信我的答案与getRotationMatrix和getOrientation有关,但我不确定如何!
请帮忙!我已经被困在这几个小时了.
解决方法:
对于Labyrinth风格的应用程序,您可能更关心加速度(重力)矢量而不是轴方向.在电话坐标系中,该向量由三个加速度计测量值的组合给出,而不是旋转角度.具体来说,只有x和y读数会影响球的运动.
如果确实需要方向,则3个角度读数代表3个欧拉角.但是,我怀疑你可能并不真正需要角度本身,而是旋转矩阵R,它由getRotationMatrix()API返回.一旦你有这个矩阵,那么它基本上就是你正在寻找的校准.如果要将世界坐标中的矢量转换为设备坐标,则应将其乘以此矩阵的倒数(在此特殊情况下,inv(R)=转置(R)).
因此,按照我在文档中找到的示例,如果要将世界重力矢量g([0 0 g])转换为设备坐标,请将其乘以inv(R):
g = inv(R)* g
(请注意,这应该会给你与读取加速度计相同的结果)
这里使用的可能API:矩阵类的invertM()和multiplyMV()方法.