Acelerômetro 3D calcular a orientação
Eu tenho valores de acelerômetro para o eixo 3 (geralmente quando existe apenas a gravidade que contém dados entre -1,0 e 1,0):
float Rx;
float Ry;
float Rz;
Faço cálculos de soma, depois obtenho os ângulos para cada eixo.
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;
Então eu defino os valores para os ângulos da caixa em opengl
rquad = Arx;
yquad = Ary;
O que gira minha caixa:
glRotatef(yquad,1.0f,0.0f,0.0f);
glRotatef(rquad,0.0f,1.0f,0.0f);
Funciona no hemisfério. Gostaria de usar a esfera completa e sei que tenho que usar o valor Arz para fazê-lo funcionar, mas não sei como posso usá-lo nessa rotação. Você poderia me ajudar?
Atualização: A resposta final está no meu caso:
rquad = -atan2(Rx/R, Rz/R)*180/M_PI;
yquad = -atan2(Ry/R, Rz/R)*180/M_PI;