【问题标题】:How do I get the angle of the phone relative to the Earth's magnetic field?如何获得手机相对于地球磁场的角度?
【发布时间】:2014-11-13 22:36:32
【问题描述】:

我正计划计算手机相对于地球磁场的角度。为此,我计划使用Sensor.TYPE_GEOMAGNETIC_ROTATION_VECTOR。在Geomagnetic Rotation Vector 中,它解释了event.values 返回的值与Rotation Vector 中的值相同,

  • x * sin(θ/2),
  • y * sin(θ/2),
  • z * sin(θ/2),
  • cos(θ/2)

以上给定值中的 x,y,z 值是什么?通过使用这些值,我可以计算手机的X轴和地球的X轴,手机的Y轴和地球的Y轴,手机的Z轴和地球的Z轴之间的角度吗?

P.S.:θ 被描述为围绕轴(x、y 或 z)的角度 θ

【问题讨论】:

    标签: android math magnetometer


    【解决方案1】:

    对于旋转向量:

    x 值是手机的“俯仰”:0 为正面朝上,-1 为 1 为面向地面。它围绕右上图中的 x 轴旋转。

    y 值是手机的“Yaw”:减小 yaw 逆时针旋转,增大 yaw 绕 y 轴顺时针旋转。

    z 值是手机的“滚动”:增加或减少滚动会使手机围绕 z 轴旋转。

    每个坐标都是从 -1 到 1 的值,因为它们是三角函数。 Android Documentation 声明它们的 x,y,z 值等于单位四元数的最后三个分量 (cos(θ/2), xsin(θ/2), ysin( θ/2), z*sin(θ/2))。使用四元数超出了我的知识范围,但是如果您想了解它们的工作原理,这里有一个教程。 http://3dgep.com/understanding-quaternions/

    我想出如何理解这些值的方法来自于在这个 API 中玩手机的俯仰/偏航/滚动来模拟 Android 手机上的运动https://code.google.com/p/openintents/wiki/SensorSimulator

    例如,Yaw 为 0,pitch 为 0,Roll 为 0 的手机平放,屏幕向上(朝向天空),手机顶部指向北方(再次使用 SensorSimulator并且您将能够更好地想象这一点,这真的很难用语言来解释)

    如果您想要一种简单的方法来计算对地球坐标系的引用,请在 SensorManager 上调用 getRotationMatrix(): Android doc

    这是一个使用旋转向量的程序演示:https://android.googlesource.com/platform/development/+/master/samples/ApiDemos/src/com/example/android/apis/os/RotationVectorDemo.java

    【讨论】:

      【解决方案2】:

      获取手机当前角度,然后获取比较的角度或属性,然后将它们相减。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多