簡體   English   中英

獲取手機的 z 軸和磁北極(而不是 y 軸)之間的角度

[英]Get angle between phone's z axis and the magnetic north pole (instead of y axis)

我知道如何使用 getOrientation 方法(如此處所述https://developer.android.com/guide/topics/sensors/sensors_position )獲取手機 y 軸和磁北之間的方向角。 但是,我需要手機的 z 軸和磁北之間的方向,以便獲得手機相機的方向。 我曾嘗試編寫自己的代碼來根據 y 軸和磁北之間的角度計算這個角度,但它給了我不可靠的數據,即使使用重力傳感器數據進行了校正(例如,當手機翻轉時)。

有沒有辦法直接得到z軸和磁北之間的角度?

在此處輸入圖片說明

基於這個問題,我建議:

    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 ...
    }

推理:

(rotationMatrix[5], rotationMatrix[2])根據(東、北)坐標描述了手機的 z 向量在地球水平面上的投影。 您需要與北軸的角度,因此北向是您的x ,東向是y atan2(y, x)順序獲取參數,這就是為什么我先把索引 2 然后 5。 z 向量指向手機正面,但我想你想要手機背面的方向,主攝像頭在哪里。 這就是為什么我把減號。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM