2013-05-02 171 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;