我必须在 Android 中编写一个指南针应用程序。用户在屏幕上看到的唯一东西是一个带有红色墙壁的立方体,它必须指向北方。这并不重要。重要的是,我需要根据设备本身的旋转来旋转该立方体,以便无论手机如何握住,红墙都继续指向北方。我的代码简单明了:
@Override
public void onSensorChanged(SensorEvent event) {
synchronized (this) {
switch (event.sensor.getType()){
case Sensor.TYPE_ACCELEROMETER:
direction = event.values[2];
break;
case Sensor.TYPE_ORIENTATION:
if (direction < 0) {
angleX = event.values[1];
angleY = -event.values[2];
angleZ = event.values[0];
} else {
angleX = -event.values[1];
angleY = -event.values[2];
angleZ = event.values[0];
}
break;
}
}
}
我添加了这个额外的方向变量,它只存储手机的显示屏是向下还是向上。我不知道我是否需要它,但它似乎修复了一些错误。我正在使用适用于 android 的SensorSimulator,但每当我的音高滑块进入 [-90, 90] 区间时,其他变量就会混淆。就好像他们得到了 180 的偏移量。但是我无法检测到我何时处于这个区间,因为音高的范围是从 -90 到 90,所以我可以从左边移动那个滑块来写,我将永远处于那个区间。
这一切只是为了向您展示我的代码进步了多远。我并不是说应该如何解决这个问题,因为我可能只会让自己陷入死胡同。你看,我已经尝试编写那个应用程序 3 天了,你可以想象我的老板有多生气。我已经阅读了各种教程,并尝试了我能找到或想到的每一个公式。所以请帮助我。我所要做的就是知道如何旋转我的立方体,它的旋转角度是以度为单位的欧拉角。