Sto provando a programmare una bussola con Android utilizzando l'accellerometro e il sensore di campo magnetico, ora mi chiedo come ottenere l'angolo corretto per la mia bussola.Compass in Android
Ho letto i valori dell'accelerometro e del sensore di campo magnetico rispettivamente in "accele" e "magne". Per ottenere l'angolo, eseguo il seguente:
float R[] = new float[9];
float I[] = new float[9];
boolean success = SensorManager.getRotationMatrix(R, I, accele, magne);
if(success) {
float orientation[] = new float[3];
SensorManager.getOrientation(R, orientation);
azimuth = orientation[0]; // contains azimuth, pitch, roll
....
Più tardi, io uso una matrice di rotazione di mettere il mio ago:
rotation.setRotate(azimuth, compass.getWidth()/2, compass.getHeight()/2);
canvas.drawBitmap(needle, rotation, null);
Ora, la documentazione di getOrientation dice, che l'orientamento [0] dovrebbe essere la rotazione attorno all'asse z. La documentazione per TYPE_ORIENTATION afferma che "Azimut, angolo tra la direzione nord magnetica e l'asse y, attorno all'asse z (da 0 a 359) 0 = Nord, 90 = Est, 180 = Sud, 270 = Ovest".
Il mio azimut tuttavia non è compreso tra 0 e 359, ma piuttosto tra -2 e 2. Che cos'è esattamente l'azimuth di getOrientation e come posso convertirlo in un angolo?
grazie :) Qual è esattamente l'ultima istruzione if? – user1809923
Math.toDegrees() vi darà un angolo compreso tra -180 e 180 da un angolo di radiazione PI-PI e + PI. Questo ha appena messo tutto sulla direzione positiva. – rgrocha
Questa è la risposta giusta. –