Blackberryプログラムで利用可能なx/y /zG力値と「方向」データを理解しています。
私の質問は、回転/方向のRAW-DATAをどのように抽出できるかということです。(プログラマーが「Blackberry-Spirit-Level」アプリで使用するものなど)
「Orientation」APIは、ある程度の浮動小数点数ではなく、のORIENTATION_TOP_UP
ような定数を返すようです。ORIENTATION_RIGHT_UP
Blackberryプログラムで利用可能なx/y /zG力値と「方向」データを理解しています。
私の質問は、回転/方向のRAW-DATAをどのように抽出できるかということです。(プログラマーが「Blackberry-Spirit-Level」アプリで使用するものなど)
「Orientation」APIは、ある程度の浮動小数点数ではなく、のORIENTATION_TOP_UP
ような定数を返すようです。ORIENTATION_RIGHT_UP
デバイスの向きの角度を直接取得する方法はないと思いますが、AccelerometerSensor
言及したクラスから入手できる生データを使用してそれらを計算できます。
APIドキュメントに示されている例を見ると、生のX、Y、Z加速度データを取得できます。次に、三角法を使用して角度を計算します。たとえば、Z軸が真下を向いた状態で保持されている(移動していない、または地球に対して加速していない)デバイスは、重力による加速度であるGに等しいZ加速度値を与えます。
デバイスが他の角度で保持されている場合、その軸に沿った加速度値は、軸間の角度の正弦/余弦と、地球に向かう垂直線によって減少します。
このサンプルコードは、これらの角度のいくつかを取得する方法を示しています。
public void run()
{
// open channel
Channel rawDataChannel = AccelerometerSensor.openRawDataChannel( Application.getApplication() );
// create raw sample vector with three components - X, Y, Z
short[] xyz = new short[ 3 ];
while( isRunning() ) {
// read acceleration
rawDataChannel.getLastAccelerationData( xyz );
// process the acceleration
process( xyz );
// sleep for maintaining query rate
try {
Thread.sleep( 500 );
} catch (InterruptedException e) {
e.printStackTrace();
}
}
// close the channel to stop sensor query routine
rawDataChannel.close();
}
private void process(short[] xyz) {
short X = xyz[0];
short Y = xyz[1];
short Z = xyz[2];
final double roll = MathUtilities.atan2(X, Z) * 180.0 / Math.PI;
final double pitch = MathUtilities.atan2(Y, Math.sqrt(X*X + Z*Z)) * 180.0 / Math.PI;
final double tilt = MathUtilities.acos(Z / Math.sqrt(X*X + Y*Y + Z*Z)) * 180.0 / Math.PI;
UiApplication.getUiApplication().invokeLater(new Runnable() {
public void run() {
String output = "Angles are {" + roll + ", " + pitch + ", " + tilt + "}";
textField.setText(output);
}
});
}
ロール、ピッチ、およびチルトの意味については、このドキュメントを参照してください。そこから数学が生まれました。
これは私が作成した本番アプリのものではないため、コードは徹底的にテストされていません。角度の符号が間違っているか、方程式が不安定であるか、またはそのようなものである可能性があります。
また、生の加速度計データを使用している場合は、キャリブレーション機能を実装する必要があります。あらゆる種類のスマートフォンレベルのアプリを実行すると、その方法の例が表示されます。したがって、上記で計算された結果は、キャリブレーション定数によって調整する必要があります。
最後に、生の加速度計データはノイズが多い可能性があるため、使用方法によっては、データのフィルタリング/平滑化も必要になる場合があります。
これは、出発点となることを目的としています。幸運を!