Ho implementato listener sia per il vettore di rotazione che per il vettore di orientamento anche se so che è ammortizzato volevo testarli entrambi.TYPE_ROTATION_VECTOR, TYPE_ORIENTATION danno risultati diversi anche con la deviazione
so rotazione Vector è un sensore fusione & consigliato ma secondo essa NORD (il valore [0] restituito da getOrientation (rotationMatrix, valore) geaving cuscinetto 0) non significa corrisponde con NORD dal sensore di orientamento. Ho anche preso parte a diverse app del playstore, i valori dei sensori di orientamento sembrano essere più vicini a loro.
Inoltre molte volte il valore di azimuth [0] da Rotation_Vector quindi getOrientation spara solo su e mantenere oscillante tra -180 e 180
PS "getRotationMatrix (float [] R, float [] I, fluttuo [ ] gravity, float [] geomagnetic) "dà anche lo stesso risultato di Rotation Vector.
public final void onSensorChanged(SensorEvent event)
{
float rotationMatrix[];
switch(event.sensor.getType())
{
.
.
.
case Sensor.TYPE_ROTATION_VECTOR:
rotationMatrix=new float[16];
mSensorManager.getRotationMatrixFromVector(rotationMatrix,event.values);
determineOrientation(rotationMatrix);
break;
case Sensor.TYPE_ORIENTATION:
sensorZValue.setText(""+event.values[0]); //rotation about geographical z axis
sensorXValue.setText(""+event.values[1]); //rotation about geographical x axis
sensorYValue.setText(""+event.values[2]); //rotation about geographical y axis
}//switch case ends
}
private void determineOrientation(float[] rotationMatrix)
{
float[] orientationValues = new float[3];
SensorManager.getOrientation(rotationMatrix, orientationValues);
double azimuth = Math.toDegrees(orientationValues[0]);
double pitch = Math.toDegrees(orientationValues[1]);
double roll = Math.toDegrees(orientationValues[2]);
sensorZValue.setText(String.valueOf(azimuth)); //rotation about geographical z axis
sensorXValue.setText(String.valueOf(pitch)); //rotation about geographical x axis
sensorYValue.setText(String.valueOf(roll)); //rotation about geographical y axis
}
voglio determinare l'angolo tra l'asse Y del telefono e il vettore che indica a nord così che era la mia prima implementazione. Si prega di suggerire.
Secondo i valori della documentazione di Android [1] punta a nord. Quindi, l'inclinazione punta a nord, non azimut :-) –