C# 如何将三维加速度转换为旋转?

C# 如何将三维加速度转换为旋转?,c#,windows-phone-7,accelerometer,C#,Windows Phone 7,Accelerometer,我有一个在WindowsPhone7中使用加速计的程序,我需要检测设备的旋转情况。我有X,Y,Z加速度,需要根据这些来计算出手机的方向。如何做到这一点?(旋转值应以度为单位)虽然我在iPhone上工作,但基本上应该是相同的问题。你的硬件需要一个陀螺仪传感器来描述旋转,特别是那些与重力平行的旋转(我们称之为z,x是对的,y是向上的)。如果设备平放在工作台上,并围绕z轴旋转,则只有离心力产生的微小加速度。因此,您可以获得一些有关旋转的信息,但您在以下方面受到限制: 1) 用户必须以特定方式握住设备,

我有一个在WindowsPhone7中使用加速计的程序,我需要检测设备的旋转情况。我有X,Y,Z加速度,需要根据这些来计算出手机的方向。如何做到这一点?(旋转值应以度为单位)

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

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

2) 即使你得到了与地面成45度角的最佳情况,也很难得到所有3个维度。如果您可以仅在两个旋转方向上限制检测,则您的情况会更好

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


结论:对于赛车游戏,用户必须将设备保持在一定角度,限制方向盘的z轴旋转以及电动滑梯等其他方向。

轴的使用可能会让人感到困惑。对于水平轴(左和右),我保持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轴的旋转


正如Kay所指出的,您仍然需要陀螺仪来输出绕每个轴旋转的角速度,以计算绕y轴的旋转。

如果您想获得手持手机的旋转角度(即在一个平面内旋转),让我们假设手持手机面向您的胸部

atan2(y加速度,x加速度)


您将获得旋转值:)它可能会出现抖动,因此您可能希望在采样周期内平均结果以使其平滑。

我想要X、Y和Z旋转值。在3D场景中旋转(类似于赛车游戏)。当用户旋转手机时,您是否尝试执行动作?或者,您只是想找到一种方法,以编程方式更新3D场景中的用户“视图”?以编程方式更新3D场景中的视图。三个线性加速度中是否有足够的信息来推断三个旋转速度?在六自由度系统中,通常无法从三个已知参数中推断出三个未知参数;这就是六个自由度的含义。我只需要根据设备的方向在3D场景(类似于赛车游戏)周围旋转。这很好,因为就在最近;陀螺仪现在包含在Windows Phone中!