2013-05-02 110 views
1

我打在SDK7.0的“AccelerometerDemo”,并有关于“旋转”从XYZ数据提取的计算问题。黑莓加速度计算

我要完成什么是有一个虚拟的“钟摆”指向直下。然而,事情正在旋转,并没有像我期望的那样移动。

这里是我的代码部分:

_accChannel.getLastAccelerationData(_xyz); 
double roll = MathUtilities.atan2(X, Z) * 180.0/Math.PI; 

graphics.setColor(Color.BLACK); 
int xcenter = 240; 
int ycenter = 400; 

int length = 220; 

int newx1 = (int)(Math.cos(roll) * (double)length) - xcenter; 
int newy1 = (int)(Math.sin(roll) * (double)length) - ycenter; 

graphics.drawLine(xcenter, ycenter, newx1, newy1); 

任何线索什么,我做错了什么?

在此先感谢!

+1

传感器自然有在读的“噪音”。您应该将读数过滤到可接受的范围以抑制噪音。 – 2013-05-02 20:22:18

+0

你的意思是说,如果一卷“样品”超过5度而丢弃它?这样只有接近CURRENT角度的读数才被使用? – user386093 2013-05-02 20:33:28

+1

取决于你的意思是“回旋”。如果它像在飓风一样的微风中摇摆,那意味着你读错了或计算错误。如果它停留在相同的地方而不是“颤抖”,那就是传感器噪音。 – 2013-05-02 20:57:17

回答

1

我看到至少两个问题:

1.Math.cos() and Math.sin()预计弧度,不度角输入。通过使用此代码:

double roll = MathUtilities.atan2(X, Z) * 180.0/Math.PI; 

已经转换成roll度。其次,你从矢量坐标中减去中心坐标。我相信你应该加入他们,就像这样:

int newx1 = (int)(Math.cos(roll) * (double)length) + xcenter; 
int newy1 = (int)(Math.sin(roll) * (double)length) + ycenter;