Android 测量直立装置的侧向倾斜
一些摄像头应用程序有一个功能,无论手机如何倾斜,它们都会在屏幕上显示一条与地平线平行的线。所谓“侧向倾斜”,我指的是绕垂直于屏幕的轴旋转设备 我已经尝试了大多数“正常”旋转函数,例如将Android 测量直立装置的侧向倾斜,android,physics,accelerometer,android-sensors,screen-rotation,Android,Physics,Accelerometer,Android Sensors,Screen Rotation,一些摄像头应用程序有一个功能,无论手机如何倾斜,它们都会在屏幕上显示一条与地平线平行的线。所谓“侧向倾斜”,我指的是绕垂直于屏幕的轴旋转设备 我已经尝试了大多数“正常”旋转函数,例如将旋转向量传感器与getRotationMatrix()和getOrientation()组合,但没有一个轴与我要找的轴对应 我还尝试只使用加速计,对所有三个轴进行标准化,并检测X轴中的重力。当设备完全直立(即不向前/向后倾斜)时,此功能正常工作。但一旦它向前或向后倾斜,测得的侧向倾斜就变得越来越不准确,因为重力现在
旋转向量
传感器与getRotationMatrix()
和getOrientation()
组合,但没有一个轴与我要找的轴对应
我还尝试只使用加速计,对所有三个轴进行标准化,并检测X轴中的重力。当设备完全直立(即不向前/向后倾斜)时,此功能正常工作。但一旦它向前或向后倾斜,测得的侧向倾斜就变得越来越不准确,因为重力现在同时作用在两个轴上
关于如何实现这种侧向旋转检测,即使手机稍微向前/向后倾斜/倾斜,也能正常工作,您有什么想法吗?getRotationMatrix
的结果将从手机的局部坐标系转换为世界坐标系。因此,其列是手机的主轴,第一列是手机的X
-轴(在纵向模式下握住手机时为+ve水平轴),第二列是Y
要在手机屏幕上获取地平线方向,必须找到水平面(世界空间)和手机平面之间的交线。首先在手机的本地基础上找到世界Z
-轴(指向天空)的坐标,即转置(R)*[0,0,1]
;由R[2][0],R[2][1]
给出的XY
坐标是屏幕空间中的垂直方向。然后,所需的水平线方向为R[2][1],-R[2][0]
当手机接近水平时,该向量的大小变得非常小-地平线不再清晰。只需停止更新低于某个阈值的地平线即可。谢谢,但我不确定如何实现您的
transpose(R)*[0,0,1
?因为这是StackOverflow而不是Math StackExchange,所以最好包含一些代码。@badcash您不需要。您只需要R[2][1],-R[2][0]
。不管怎么说,我不知道实施起来有多困难,没有冒犯