Conversión de coordenadas del dispositivo en coordenadas del mundo

Estoy haciendo este proyecto una parte de lo que me obliga a obtener los valores de la aceleración del teléfono (android) en cada eje. Así, por ejemplo, no importa cómo se coloque el teléfono el valor de la aceleración en el eje z, si el teléfono está parado, debe ser 9.8 y a lo largo de los otros ejes, debe ser 0. Ahora pasé por un montón de hilos a Conseguir esto funcionando correctamente. He intentado hacer lo que se sugiere aquí

trueacceleration[0] =(float) (accelerometervalues[0]*(Math.cos(orientationvalues[2])*Math.cos(orientationvalues[0])+Math.sin(orientationvalues[2])*Math.sin(orientationvalues[1])*Math.sin(orientationvalues[0])) + accelerometervalues[1]*(Math.cos(orientationvalues[1])*Math.sin(orientationvalues[0])) + accelerometervalues[2]*(-Math.sin(orientationvalues[2])*Math.cos(orientationvalues[0])+Math.cos(orientationvalues[2])*Math.sin(orientationvalues[1])*Math.sin(orientationvalues[0]))); trueacceleration[1] = (float) (accelerometervalues[0]*(-Math.cos(orientationvalues[2])*Math.sin(orientationvalues[0])+Math.sin(orientationvalues[2])*Math.sin(orientationvalues[1])*Math.cos(orientationvalues[0])) + accelerometervalues[1]*(Math.cos(orientationvalues[1])*Math.cos(orientationvalues[0])) + accelerometervalues[2]*(Math.sin(orientationvalues[2])*Math.sin(orientationvalues[0])+ Math.cos(orientationvalues[2])*Math.sin(orientationvalues[1])*Math.cos(orientationvalues[0]))); trueacceleration[2] = (float) (accelerometervalues[0]*(Math.sin(orientationvalues[2])*Math.cos(orientationvalues[1])) + accelerometervalues[1]*(-Math.sin(orientationvalues[1])) + accelerometervalues[2]*(Math.cos(orientationvalues[2])*Math.cos(orientationvalues[1]))); 

Pero esto me da algo totalmente diferente y cambia mientras muevo el teléfono. ¿Alguna idea de cuál debe ser la manera correcta / más fácil de hacer esto?

    One Solution collect form web for “Conversión de coordenadas del dispositivo en coordenadas del mundo”

    El acelerómetro está influenciado por la gravedad, incluso el dispositivo está sentado sobre la mesa sin ninguna otra fuerza aplicada.

    Tomado de Android Desarrollador :

    Un sensor de este tipo mide la aceleración aplicada al dispositivo (Ad). Conceptualmente, lo hace midiendo fuerzas aplicadas al propio sensor (Fs) usando la relación:

    Ad = - ∑Fs / mass

    En particular, la fuerza de gravedad siempre está influyendo en la aceleración medida:

    Ad = -g - ∑F / mass

    Por esta razón, cuando el dispositivo está sentado sobre una mesa (y obviamente no está acelerando), el acelerómetro lee una magnitud de g = 9.81 m/s^2

    En cuanto a la conversión de coordenadas de dispositivo a woordinates mundo, ¿por qué no utilizar getRotationMatrix () en su lugar?

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.