2

我编写了一个小代码,通过将作为加速度计值的旋转矩阵(使用 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更好?

4

0 回答 0