【问题标题】:Measure sideways tilt of upright device测量直立设备的侧向倾斜度
【发布时间】:2018-04-19 07:13:16
【问题描述】:

一些相机应用程序有一个功能,即无论手机如何倾斜,它们都会在屏幕上显示一条始终与地平线平行的线。 “侧向倾斜”是指围绕垂直于屏幕的轴旋转设备。

我已经尝试了大多数“正常”旋转功能,例如将 ROTATION_VECTOR 传感器与 getRotationMatrix()getOrientation() 组合,但结果轴似乎都与我正在寻找的轴不对应。

我还尝试仅使用加速度计,将所有三个轴归一化并检测X-axis 中的重力多少。当设备完全直立(即不向前/向后倾斜)时,这可以正常工作。但是一旦它向前或向后倾斜,测量的侧向倾斜就会变得越来越不准确,因为重力现在同时作用在两个轴上。

关于如何以一种即使手机稍微向前/向后倾斜/倾斜也能正常工作的方式实现这种侧向旋转检测的任何想法?

【问题讨论】:

    标签: android physics accelerometer android-sensors screen-rotation


    【解决方案1】:

    getRotationMatrix 的结果从手机的本地坐标系转换为世界坐标系。因此,它的列是手机的主轴,第一个是手机的X 轴(在纵向模式下握住手机时的+ve 水平轴),第二个是@ 987654323@。

    要获得手机屏幕上的地平线方向,必须找到水平面(世界空间)和手机平面之间的交线。首先在手机的本地基础上找到世界坐标Z-axis(指向天空)——即transpose(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]。无论如何,我看不出实施起来有多难,没有冒犯
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-11
    • 2023-03-23
    • 2013-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多