gpt4 book ai didi

android - 在 Android 应用程序中重新映射坐标系

转载 作者:太空宇宙 更新时间:2023-11-03 10:21:21 25 4
gpt4 key购买 nike

我正在实现一个简单的 Android 应用程序,我需要在其中识别北方。

所以我已经实现了 SensorEventListener 并且我使用了这样的东西:

@Override
public void onSensorChanged(SensorEvent event) {
if(event.sensor.getType() == Sensor.TYPE_ROTATION_VECTOR)
{
SensorManager.getRotationMatrixFromVector(mRotationMatrix, event.values);
SensorManager.remapCoordinateSystem(mRotationMatrix, SensorManager.AXIS_X, SensorManager.AXIS_Z, orientationVals);
SensorManager.getOrientation(mRotationMatrix, orientationVals);

orientationVals[0] = (float) Math.toDegrees(orientationVals[0]);
orientationVals[1] = (float) Math.toDegrees(orientationVals[1]);
orientationVals[2] = (float) Math.toDegrees(orientationVals[2]);

tv.setText(" Yaw: "+ orientationVals[0] +"\n Pitch: "+ orientationVals[1]+"\n Roll: "+ orientationVals[2]);
}

}

问题是代码行

SensorManager.remapCoordinateSystem(mRotationMatrix, SensorManager.AXIS_X, SensorManager.AXIS_Z, orientationVals);

似乎不起作用,因为在这两种情况下(有或没有此代码行)Yaw(方位角)的值取决于手机头部的方向(让它放在背面)

我预期,使用我的重新映射,偏航会根据手机背面(后置摄像头)的方向发生变化。

为什么我的重映射不起作用?

最佳答案

不确定你是否解决了这个问题,但是你的台词:

SensorManager.remapCoordinateSystem(mRotationMatrix, SensorManager.AXIS_X, SensorManager.AXIS_Z, orientationVals);

重新映射 mRotationMatrix 中的值,并将结果放入 orientationVals。这是正确的(除了重新映射的坐标数组的混淆变量名称之外)。

但是,您可以在调用之后直接覆盖此重新映射:

SensorManager.getOrientation(mRotationMatrix, orientationVals);

这会获取 mRotationMatrix 中的值并根据这些(旧的、未重新映射的)值计算方向,并将其存储在 orientationVals 中。

因此您上面的代码只是获取 mRotationMatrix 的方向,其轴尚未重新映射,这可能解释了您的问题。

像下面这样的东西可能解决你的问题:

float[] remapCoords = new float[16];
SensorManager.remapCoordinateSystem(mRotationMatrix, SensorManager.AXIS_X, SensorManager.AXIS_Z, remapCoords);
SensorManager.getOrientation(remapCoords, orientationVals);

假设您的轴重新映射是您真正想要/正确的,但这是另一个问题。

我应该注意到 article cited ,虽然最优秀,但没有明确提到必须在计算旋转矩阵时每次调用重新映射坐标系,而不仅仅是在显示更改(即 onCreate、onSurfaceChanged 等)时,这可能对某些人来说是显而易见的,但对其他人而言则不然。

关于android - 在 Android 应用程序中重新映射坐标系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20564735/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com