[英]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.