无法在 Android 上将设备坐标系转换为世界坐标系

发布于 2024-12-09 03:14:57 字数 1259 浏览 0 评论 0原文

我编写了一段小代码,通过将旋转矩阵(使用 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 更好?

I have written a small code to convert the device co-ordinates into world co-ordinates by multiplying the Rotation matrix(using getRotationMatrix) and the vector (Ax,Ay,Az) which are the accelerometer values. When I run this, and the phone is static, I get a very fluctuating value for the Z axis(from 9.3 to 10.3) and the other two are 0. However when I give the phone some acceleration in any direction , it still doesn't show any change to those values and they remain zero. This is the part of the code where I get the values.

     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];
        }

Also I would like to know if it would be better to get the rotation matrix based on the orientation sensor on my own or use the inbuilt getRotationMatrix?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文