设备保持静止时垂直轴上的 Android 设备角度

Posted

技术标签:

【中文标题】设备保持静止时垂直轴上的 Android 设备角度【英文标题】:Android device angle on vertical axis while device stays still 【发布时间】:2013-05-15 17:51:52 【问题描述】:

我正在开发我的第一个应用程序,对于一些计算,我需要一个垂直轴的角度。基本上我正在尝试制作简单的测量工具,可以在按钮点击时进行计算。 我有高度(H),其中是设备,我需要设备垂直轴的角度。有了这些值,我就可以计算 sin 等等。

我尝试使用此链接 (finding orientation using getRotationMatrix() and getOrientation()) 中的代码来获取值,但它崩溃了,而且我认为这不是我想要的值,因为设备保持静止。

说明我的意思(我有“H”值,我正在搜索角度“a”或可以从中提取它的数据):

任何有用的链接、教程或示例都会非常有帮助。

【问题讨论】:

【参考方案1】:

我假设 android 设备将沿着您绘制的三角形的斜边放置,因此如果设备平放在桌子上,那么您的角度“a”将为 90 度,如果设备直立,则角度“a”为零。如果是这样,那么该角度“a”与设备的间距有关,这正是您应该能够通过使用 getRotationMatrix() 和 getOrientation() 获得的。但是,当设备平放在桌子上时,俯仰角通常定义为零,而当它直立时,俯仰角通常定义为 90 度,因此您的角度“a”等于(90 度 - 俯仰角)。注意单位,有时角度是弧度,有时是度数。

如果你的代码崩溃了,那么你一定是不小心在某个地方引入了一个错误,因为我肯定有代码使用 getRotationMatrix() 和 getOrientation() 而不会崩溃。

当设备接近垂直位置时,您会发现 getOrientation() 生成的某些方向值变得不稳定。这是一个被称为Gimbal lock 的问题,因为当设备垂直时,方位角和滚动是一回事。但是,音调应该保持可靠。

如果您在设备垂直时需要可靠的方位角和俯仰角,那么您可以查看my answer to the question 'Android Compass that can Compensate for Tilt and Pitch'。该答案的代码绝对有效,如果您无法使 getRotationMatrix() 和 getOrientation() 正常工作,那么由此产生的音调对您来说将很好。

【讨论】:

以上是关于设备保持静止时垂直轴上的 Android 设备角度的主要内容,如果未能解决你的问题,请参考以下文章

垂直于屏幕时,视图在 Y 轴上的旋转动画上剪辑

输入事件不会使用角度触发Android设备上的功能

Android这些年随着系统的升级,你的手机是不是越来约省电了呢

仅使用陀螺仪和加速度计的正确方法可以在 ANDROID 上的任何轴上获得可靠的当前角度

为啥 Windows 8.1 加速计 API 在设备静止时不输出数据?

垂直布局的小型设备上的高度不正确? [关闭]