gpt4 book ai didi

c - 3d 加速度计计算方向

转载 作者:太空狗 更新时间:2023-10-29 16:22:59 25 4
gpt4 key购买 nike

我有 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;

最佳答案

正确答案是:

Roll = atan2(Y, Z) * 180/M_PI;
Pitch = atan2(-X, sqrt(Y*Y + Z*Z)) * 180/M_PI;

来源:https://www.nxp.com/docs/en/application-note/AN3461.pdf (第 10 页,公式 25 和 26)

uesp 的回答是错误的。在俯仰和滚动都超过 45 度之前,这看起来是一个可以接受的近似值。

我可能会假设一个不同的方向约定,但即使您以任何一致的方式交换轴和反转值,uesp 的计算也永远不会相同。

关于c - 3d 加速度计计算方向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3755059/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com