如何将3D加速转换为旋转?

时间:2011-02-05 20:43:46

标签: c# windows-phone-7 accelerometer

我有一个程序,它使用Windows Phone 7中的加速度计,我需要检测设备的旋转。我有X,Y,Z加速度,并且需要以某种方式根据它来确定手机的方向。如何实现这一目标? (旋转值应以度为单位)

3 个答案:

答案 0 :(得分:1)

虽然我在iPhone上工作但基本上应该是同样的问题。你的硬件需要一个陀螺仪传感器来描述旋转,特别是那些与重力平行的旋转(让我们称之为z,x是正确的,y是向上的)。如果设备平放在工作台上并围绕此z轴旋转,则仅有离心力测量的微小加速度。因此,您可以获得有关轮换的一些信息,但您受限于:

1)用户必须以特定方式握住设备才能正确检测旋转

2)即使你得到45度对地的最佳情况,也很难获得所有3个维度。如果您只能限制2个旋转方向的检测,那么您的生活会更好。

3)您仅限于旋转或平移,但同时检测旋转与线性运动相当困难。

结论:对于赛车游戏,用户要将设备保持在一定的角度,限制方向盘的z-Rotation和其他方向。电力滑梯或其他什么。

答案 1 :(得分:1)

轴的使用可能非常混乱。我保持水平轴(左和右)的X方向,垂直轴(上下)Y,Z轴深(远和近)。

使用加速度计,您只能检测绕X轴和Z轴的旋转,而不能检测Y轴的旋转。

假设您的手机在静止位置处平放,重力将导致Y加速度在-9.8左右,X和Z加速度将在0左右。

假设手机在该位置保持平稳。当您围绕Y轴旋转手机时(假设您没有平移到手机或在旋转时改变手机的位置),X,Y和Z加速度值没有显着变化。因此,您无法检测到有关Y轴的任何旋转。

当您绕X轴和Z轴旋转时(假设旋转时手机的位置没有变化),所有3个加速度值都会改变,但矢量将具有x ^ 2 + y ^ 2 + z ^ 2 =的特征9.8 ^ 2

您可以使用简单的三角公式来确定绕Z轴和Z轴的旋转。

正如凯指出的那样,你仍然需要陀螺仪输出绕每个轴旋转的角速度来计算围绕y轴的旋转。

答案 2 :(得分:1)

如果你想让手中握住手机的旋转角度(即在一个平面内旋转),那就说是面向你的胸部...

atan2(y accel。,x accel。)

你会获得旋转值:)这可能会让人感到紧张,所以你可能想要在一段时间内平均结果以平滑它。