获取手机的 z 轴和磁北极(而不是 y 轴)之间的角度 [英] Get angle between phone's z axis and the magnetic north pole (instead of y axis)

查看:64
本文介绍了获取手机的 z 轴和磁北极(而不是 y 轴)之间的角度的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我知道如何使用 getOrientation 方法获取手机 y 轴和磁北之间的方向角(如此处所述

解决方案

基于 这个问题,我建议这样做:

 private val rotationMatrix = FloatArray(9)覆盖乐趣 onSensorChanged(event: SensorEvent) {if (event.sensor.type != Sensor.TYPE_ROTATION_VECTOR) 返回SensorManager.getRotationMatrixFromVector(rotationMatrix, event.values)val 方位角 = atan2(-rotationMatrix[2], -rotationMatrix[5])... 使用方位角 ...}

推理:

(rotationMatrix[2], rotationMatrix[5]) 描述了手机的 z 向量在地球水平面上的投影,以(东,北)坐标表示.您需要与北轴的角度,因此北方向是您的 x,东方向是 y.atan2(y, x) 顺序获取参数,这就是为什么我先放索引 2 再放 5.z 向量指向前面手机,但我想你想要手机背面的方向,也就是主摄像头所在的位置.这就是我加减号的原因.

I am aware how to get the orientation angle between the y-axis of the phone and the magnetic north using the getOrientation method (as described here https://developer.android.com/guide/topics/sensors/sensors_position). However, I would need the orientation between the z-axis of the phone and the magnetic north, so to get the direction of the phone's camera. I have tried writing my own code to calculate this angle from the angle between the y-axis and the magnetic north, but it gives me unreliable data, even if corrected with the gravity sensor data (e.g. when the phone is flipped over).

Is there a way to directly get the angle between the z-axis and the magnetic north?

解决方案

Building on this question, I would suggest this:

    private val rotationMatrix = FloatArray(9)

    override fun onSensorChanged(event: SensorEvent) {
        if (event.sensor.type != Sensor.TYPE_ROTATION_VECTOR) return
        SensorManager.getRotationMatrixFromVector(rotationMatrix, event.values)
        val azimuth = atan2(-rotationMatrix[2], -rotationMatrix[5])
        ... use azimuth ...
    }

Reasoning:

(rotationMatrix[2], rotationMatrix[5]) describes the projection of the phone's z-vector on the Earth's horizontal plane, in terms of the (east, north) coordinates. You need the angle to the north axis, so the north-direction is your x and the east-direction is the y. atan2 takes the parameters in the (y, x) order, that's why I put the index 2 first and then 5. The z-vector points out of the front of the phone, but I presume you want the direction of the phone's back, where the main camera is. That's why I put the minus signs.

这篇关于获取手机的 z 轴和磁北极(而不是 y 轴)之间的角度的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆