Трехмерный акселерометр рассчитывает ориентацию

У меня есть значения акселерометра для 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;
30
задан Jeroen Boeye 6 November 2019 в 11:09
поделиться