Невозможно перевести систему координат устройства в мировую систему координат на Android - PullRequest
2 голосов
/ 10 октября 2011

Я написал небольшой код для преобразования координат устройства в мировые координаты путем умножения матрицы вращения (используя getRotationMatrix) и вектора (Ax, Ay, Az), которые являются значениями акселерометра. Когда я запускаю это, и телефон статичен, я получаю очень колеблющееся значение для оси Z (от 9,3 до 10,3), а другие два равны 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?

...