我编写了一个小代码,通过将作为加速度计值的旋转矩阵(使用 getRotationMatrix)和向量(Ax,Ay,Az)相乘,将设备坐标转换为世界坐标。当我运行它并且手机是静态的时,我得到一个非常波动的 Z 轴值(从 9.3 到 10.3),另外两个为 0。但是当我在任何方向上给手机一些加速度时,它仍然没有t 显示对这些值的任何更改,并且它们保持为零。这是我获取值的代码部分。
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更好?