Я написал небольшой код для преобразования координат устройства в мировые координаты путем умножения матрицы вращения (используя 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?