我正在尝试使用“ C”基于俯仰和横滚值设计图形。为此,我有一个倾斜传感器(加速度计),可显示滚动和俯仰值。我想利用图形应该能够向我显示倾斜传感器的方向。

以下是我程序中的一些代码,这些代码确定角度(基于俯仰和横滚值)。

szBuff []具有R:SXXX.XX P:SXXX.XX \ r \ n格式的数据

其中S =符号,R =滚动,P =音高。

    if (szBuff[2] == '+' && szBuff[12] == '-')
    {
       -------------------------------------
       if(pitch>roll){
        Angle = atan(pitch / pitch- roll);             // Insert formula here
       -------------------------------------
      }
    }


这里的俯仰和横滚没有迹象。

我绘制了一条基于俯仰和横滚值发生偏转的线。使用以上算法,我计算出它必须偏转的角度。

 line((left+150),(top+150),((left+150)+150*cos(Angle)),((top+150)+150*sin(Angle)));


我需要一个可以满足我目标的数学方程式。 Angle = atan(pitch / pitch -roll)不会绘制所需的角度。仅对于相同的俯仰和横滚,它才成立,并且会抛出90度(这意味着我将传感器向前倾斜)。因此,您能否用一些数学表达式代替Angle公式,该表达式可以根据侧倾和俯仰生成倾斜角。

我已附上输出的屏幕截图。如果您发现我的问题含糊不清,请原谅并提出改善问题的建议,以便我得到答复。

最佳答案

通常,俯仰和横滚是角度。我假设侧倾是绕垂直轴旋转的角度,俯仰是绕水平轴旋转的角度。

然后,您可以将3d位置计算为:

x = sin(roll) * cos(pitch)
y = sin(pitch)
z = cos(roll) * cos(pitch)


rollpitch均应包含其符号。

看来您想将此向量投影在固定平面上,可能是xz平面上。然后,您可以使用以下方法绘制该图像:

line( left+150,
      top+150,
      left+150+150*x,
      top+150+150*z );

09-29 21:54