我假设 Android 设备将沿着您绘制的三角形的斜边放置,因此如果设备平放在桌子上,那么您的角度“a”将为 90 度,并且如果设备直立那么角度“a”将为零。如果是这样,那么该角度“a”与设备的间距有关,这正是您应该能够通过使用 getRotationMatrix() 和 getOrientation() 获得的。然而,当设备平放在桌子上时,俯仰角通常定义为零,而当它直立时,俯仰角通常定义为 90 度,因此您的角度“a”等于(90 度 - 俯仰角)。注意单位,有时角度以弧度为单位,有时以度为单位。
如果你的代码崩溃了,那么你一定是不小心在某个地方引入了一个错误,因为我肯定有代码使用 getRotationMatrix() 和 getOrientation() 而不会崩溃。
您会发现当设备接近垂直位置时,getOrientation() 生成的某些方向值会变得不稳定。这是一个被称为云台锁定的问题,因为当设备垂直时,方位角和滚动是一回事。然而,音高应该保持可靠。
如果您在设备垂直时需要可靠的方位角和俯仰角,那么您可以看看我对“可以补偿倾斜和俯仰角的 Android 指南针”问题的回答。该答案具有绝对有效的代码,如果您无法使 getRotationMatrix() 和 getOrientation() 正常工作,那么由此产生的音调对您来说将很好。