【问题标题】:Android device angle on vertical axis while device stays still设备保持静止时垂直轴上的 Android 设备角度
【发布时间】:2013-05-15 17:51:52
【问题描述】:
【问题讨论】:
标签:
android
android-sensors
android-orientation
【解决方案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() 正常工作,那么由此产生的音调对您来说将很好。