【发布时间】:2021-06-04 18:46:36
【问题描述】:
我在使用 getOrientation 时遇到了一些问题。我在横向模式下运行我的应用程序,但我遇到了一个轴的问题。代码中有更多解释,一些图片:
valuesMagnet = new float[3];
valuesAccel = new float[3];
valuesOrientation = new float[3];
rotationMatrix = new float[9];
rotationMatrixTemp= new float[9];
....
@Override
public void onSensorChanged(SensorEvent event) {
switch (event.sensor.getType()) {
case Sensor.TYPE_ACCELEROMETER:
System.arraycopy(event.values, 0, valuesAccel, 0, 3);
break;
case Sensor.TYPE_MAGNETIC_FIELD:
System.arraycopy(event.values, 0, valuesMagnet, 0, 3);
break;
}
if (SensorManager.getRotationMatrix(rotationMatrixTemp, null, valuesAccel, valuesMagnet)) {
//SensorManager.remapCoordinateSystem(rotationMatrixTemp, SensorManager.AXIS_X, SensorManager.AXIS_Z, rotationMatrix);
SensorManager.getOrientation(rotationMatrix, valuesOrientation);
for (int i = 0; i < valuesOrientation.length; i++) {
valuesOrientation[i] /= Math.PI;
valuesOrientation[i] *= 100;
valuesOrientation[i] = (int)valuesOrientation[i];
valuesOrientation[i] /= 100;
}
updateOrientationBuffer(valuesOrientation);
quadcopter.onEvent(new Event(Event.Codes.ORIENTATION_CHANGED, calculateSmoothedOrientation()));
}
else {
Log.d("App", "Matrix rotate error");
}
}
我希望orientation[1] 轴在将手机旋转 180 度时给出 -1 和 1 之间的全谱值。此外,目标设备不是陀螺仪。
【问题讨论】:
-
您能否发布更多代码以查看您是如何生成 valuesAccel 和 valuesMagnet 的?
-
@GilMoshayof,我已经编辑了我的帖子。
-
你使用
SensorManager获取方向传感器吗?还是您使用原始传感器数据?我不确定(我在文档中找到了不同的信息),但我认为第一个可能使用 radians,第二个可能使用 degrees。请检查是否不是这种情况。 -
很难理解你的图片是什么意思。我在您的代码中注意到“qaudcopter”。我想你想用手机控制它,当手机放下时,四轴飞行器不动,当手机向左倾斜时,四轴飞行器向左移动。为此,您只需要加速度计的 x,y 轴。你宁愿不想知道你的手机是朝北还是朝东——这就是你得到的方向。
标签: java android orientation