android - 在 android 中计算给定方位角、俯仰角和横滚角的相对方向?

标签 android math orientation

当我在 Android 应用程序中收听方向事件时,我得到一个 SensorEvent,其中包含 3 个 float - 相对于真实世界轴的方位角、俯仰角和横滚角。

现在假设我正在构建一个类似 labyrinth 的应用程序,但我不想强制用户通过电话并握住电话,使 xy 平面与地面平行。相反,我希望能够让用户随心所欲地握住手机,躺下或者坐下并以一定角度握住手机。换句话说,我需要根据用户的喜好来校准手机。

我该怎么做?

另请注意,我认为我的答案与 getRotationMatrixgetOrientation 有关,但我不确定如何处理!

求助!我已经坚持了几个小时。

最佳答案

对于迷宫式应用程序,您可能更关心加速度(重力)矢量而不是轴方向。在 Phone 坐标系中,该矢量由三个加速度计测量值的组合给出,而不是旋转角度。具体来说,只有 xy 读数会影响球的运动。

如果您确实需要方向,则 3 个角度读数代表 3 个欧拉角。但是,我怀疑您可能并不真正需要角度本身,而是需要旋转矩阵 R,它由 getRotationMatrix() API 返回。一旦你有了这个矩阵,它就基本上就是你正在寻找的校准。当您想将世界坐标中的向量转换为您的设备坐标时,您应该将它乘以该矩阵的(在这种特殊情况下,inv(R) = 转置(R)。

因此,按照我在文档中找到的示例,如果您想将世界重力矢量 g ([0 0 g]) 转换为设备坐标,请将其乘以 inv(R):

g = inv(R) * g

(请注意,这应该会为您提供与读取加速度计相同的结果)

此处可能使用的 API:矩阵类的 invertM()multiplyMV() 方法。

关于android - 在 android 中计算给定方位角、俯仰角和横滚角的相对方向?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4340804/

相关文章:

java - 如何使用 ThreadPoolExecutor 调用 webservice

c - 从字符串计算数学函数

javascript - 仅在选中时调用复选框

Swift landscape orientation 仅适用于一个 UI View Control

android - 使用 ExifInterface 设置图像方向

java - 更改应用程序中的方向

android - 如果这是主线程崩溃,如何从 UncaughtExceptionHandler 启动 Activity ?

java - onReceive 从未在 BroadcastReceiver 的子类中调用

android - 如何将 OpenCV 集成到 Qt Creator Android 项目中

php - 试图在 PHP 中创建类似于近似子集和表的算法