Tengo valores del acelerómetro para el 3 eje (por lo general cuando sólo hay gravedad contiene datos entre -1,0 y 1,0):3d Acelerómetro calcular la orientación
float Rx;
float Ry;
float Rz;
hago cálculos Soma, entonces consigo los ángulos para cada eje
float R = sqrt(pow(Rx,2)+pow(Ry,2)+pow(Rz,2));
float Arx = acos(Rx/R)*180/M_PI;
float Ary = acos(Ry/R)*180/M_PI;
float Arz = acos(Rz/R)*180/M_PI;
Entonces definir los valores de los ángulos de la caja en OpenGL
rquad = Arx;
yquad = Ary;
que gira mi caja:
glRotatef(yquad,1.0f,0.0f,0.0f);
glRotatef(rquad,0.0f,1.0f,0.0f);
que funcione en el hemisferio. Me gustaría usar la esfera completa y sé que tengo que usar el valor de Arz para hacerlo funcionar, pero no sé cómo puedo usar eso para esta rotación. ¿Usted me podría ayudar?
Actualización: La respuesta final es en mi caso:
rquad = -atan2(Rx/R, Rz/R)*180/M_PI;
yquad = -atan2(Ry/R, Rz/R)*180/M_PI;
Sé que esta pregunta es muy antigua, pero odio ver respuestas equivocadas. Yo mismo estaba buscando esto, y encontré cientos de visitas en Google, la mayoría de ellas con la misma respuesta incorrecta – matteo
Por cierto, me olvidé de mencionar la fuente, que contiene una explicación muy exhaustiva: http: //www.freescale. com/files/sensors/doc/app_note/AN3461.pdf – matteo
Suponiendo que está utilizando las ecuaciones 25 y 26 de la fuente vinculada (un gran recurso por cierto), ¿no debería el tono ser 'atan2 (-X, sqrt (Y * Y + Z + Z)) '? – uesp