Mam zaimplementowany detektor dla wektora obrotu i wektora orientacji, choć wiem, że jest on amortyzowany, chciałem przetestować oba.TYPE_ROTATION_VECTOR, TYPE_ORIENTATION dają różne wyniki, również z odchyleniem
znam wektora obrotu jest czujnik fuzyjne & zalecane, ale w zależności od tego na północ (pomiędzy wartościami [0] zwrócony przez getOrientation (rotationMatrix wartość) geaving łożyska 0) nie pasuje z Północnej od czujnik położenia. Sprawdziłem również z różnych aplikacji z playstore, wartości czujników orientacji wydają się być bardziej blisko nich.
Ponadto wiele razy moja wartość azymutu [0] z Rotation_Vector następnie getOrientation tylko trafia się i zachować oscylujące pomiędzy -180 do 180
PS „getRotationMatrix (float [] R, float [] I, float [ ] grawitacja, float [] geomagnetic) "również daje taki sam wynik, jak wektor obrotu.
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
}
Chcę określić kąt między osią Y telefonu i wektor wskazujący północy więc to było moje pierwsze wdrożenie. Proszę sugerować.
Zgodnie z wartościami dokumentacji Androida [1] wskazuje północ. A więc - punkty na północ, a nie azymut :-) –