回転行列 (getRotationMatrix を使用) と加速度計の値であるベクトル (Ax、Ay、Az) を乗算することにより、デバイス座標をワールド座標に変換する小さなコードを作成しました。これを実行すると、電話が静的で、Z 軸の値が非常に変動し (9.3 から 10.3)、他の 2 つは 0 になります。ただし、電話に任意の方向に加速度を与えると、それでも変化しません。これらの値に変化が見られず、ゼロのままです。これは、値を取得するコードの一部です。
if(ctp.getType()==Sensor.TYPE_ACCELEROMETER){
Ca[0]=event.values[0];
Ca[1]=event.values[1];
Ca[2]=event.values[2];
SensorManager.getRotationMatrix(R, I, Ca , Cm);
for(i=0;i<16;i++)
rotmat[i/4][i%4]=R[i];
fAx=0;
fAy=0;
fAz=0;
Ca[3]=0;
for(i=0;i<4;i++){
fAx+=rotmat[0][i]*Ca[i];
fAy+=rotmat[1][i]*Ca[i];
fAz+=rotmat[2][i]*Ca[i];
}
buff1.append(fAx);
x.setText(buff1.toString());
buff2.append(fAy);
y.setText(buff2.toString());
buff3.append(fAz);
z.setText(buff3.toString());
}
else if(ctp.getType()==Sensor.TYPE_MAGNETIC_FIELD){
Cm[0]=event.values[0];
Cm[1]=event.values[1];
Cm[2]=event.values[2];
}
また、自分で方向センサーに基づいて回転行列を取得するか、組み込みの getRotationMatrix を使用する方がよいかどうかを知りたいですか?