В качестве значения матрицы вращения оно содержит public static boolean getRotationMatrix (float[] R, float[] I, float[] gravity, float[] geomagnetic)
Здесь, как я могу рассчитать float[] gravity
? Я нашел пример кода, где это вычислить orientation
с использованием как Accelerometer
и Magnetic field
Вычислить матрицу вращения с использованием магнитного поля
boolean success = SensorManager.getRotationMatrix(
matrixR,
matrixI,
valuesAccelerometer,
valuesMagneticField);
if(success){
SensorManager.getOrientation(matrixR, matrixValues);
double azimuth = Math.toDegrees(matrixValues[0]);
double pitch = Math.toDegrees(matrixValues[1]);
double roll = Math.toDegrees(matrixValues[2]);
readingAzimuth.setText("Azimuth: " + String.valueOf(azimuth));
readingPitch.setText("Pitch: " + String.valueOf(pitch));
readingRoll.setText("Roll: "+String.valueOf(roll));
}
Мои вопросы:
значение- ли ориентация значение матрицы поворота?
- Если нет, то как я могу реализовать этот код, чтобы получить значение матрицы вращения с использованием магнитного? поле?
Чтобы получить матрицу поворота я использовать этот код
public void onSensorChanged(SensorEvent sensorEvent) {
if (timestamp != 0) {
final double dT = (sensorEvent.timestamp - timestamp) * NS2S;
double magneticX = sensorEvent.values[0];
double magneticY = sensorEvent.values[1];
double magneticZ = sensorEvent.values[2];
double omegaMagnitude =Math.sqrt(magneticX*magneticX + magneticY*magneticY + magneticZ*magneticZ);
if (omegaMagnitude > EPSILON) {
magneticX /= omegaMagnitude;
magneticY /= omegaMagnitude;
magneticZ /= omegaMagnitude;
}
double thetaOverTwo = omegaMagnitude * dT/2.0f;
double sinThetaOverTwo =Math.sin(thetaOverTwo);
double cosThetaOverTwo = Math.cos(thetaOverTwo);
deltaRotationVector[0] = (double) (sinThetaOverTwo * magneticX);
deltaRotationVector[1] = (double) (sinThetaOverTwo * magneticY);
deltaRotationVector[2] = (double) (sinThetaOverTwo * magneticZ);
deltaRotationVector[3] = cosThetaOverTwo;
}
double[] deltaRotationMatrix = new double[9];
SensorManager.getRotationMatrixFromVector(deltaRotationMatrix, deltaRotationVector);
}
Но проблема заключается в getRotationMatrixFromVector
это говорит Undefine для sensor.Any идеи?
Спасибо. Посмотрите на мой второй код, где я пытаюсь получить 9 значений матрицы вращения. Правильно ли это получить эти значения. – MBMJ
Возможно. Я сделал это долгое время, вычислив матрицу вращения из вектора, не дал мне хороших результатов (хотя я, возможно, сделал что-то не так). Все, что я знаю, это то, что решение, которое я дал вам, прекрасно работает (я все еще использую его) и прост в реализации. – PeterGriffin
Я нашел матрицу поворота, используя этот 'if (success) { SensorManager.getOrientation (matrixR, matrixValues); // код здесь, чтобы отобразить значение матрицы , где matrixR является матрицей вращения и дает мне результат. Но i не понимаете, использует ли он реальную систему координат? – MBMJ