我有三个轴的加速度计数值(通常只有重力时包含介于-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;
atan2(-X,sqrt(Y * Y + Z + Z))
吗? - uesp