У меня есть значения акселерометра для 3 осей (обычно, когда есть только сила тяжести, данные находятся в диапазоне от -1,0 до 1,0):
float Rx;
float Ry;
float Rz;
Я делаю некоторые вычисления, затем получаю углы для каждой оси.
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;
Затем я установил значения для углов прямоугольника в opengl
rquad = Arx;
yquad = Ary;
, который вращает мой ящик:
glRotatef(yquad,1.0f,0.0f,0.0f);
glRotatef(rquad,0.0f,1.0f,0.0f);
Он работает на полусфере. Я хотел бы использовать полную сферу, и я знаю, что мне нужно использовать значение Arz, чтобы оно работало, но я не знаю, как я могу использовать это для этого вращения. Не могли бы вы мне помочь?
Обновление: Окончательный ответ в моем случае:
rquad = -atan2(Rx/R, Rz/R)*180/M_PI;
yquad = -atan2(Ry/R, Rz/R)*180/M_PI;