여기에는 회전 행렬 값이 포함되어 있습니다. public static boolean getRotationMatrix (float[] R, float[] I, float[] gravity, float[] geomagnetic)
여기에 float[] gravity
을 어떻게 계산합니까?자기장을 사용하여 회전 행렬을 계산하십시오.
- 인가 방향 값이 회전 행렬 값은 다음과 같습니다 둘 다
Accelerometer
및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)); }
내 질문
Magnetic field
은을 사용하여이orientation
을 계산 코드의 샘플을 찾았나요? - 그렇다면 어떻게하면 자기를 사용하여 회전 행렬 값을 얻으려면이 코드를 구현할 수 있습니까? 들?
내가이 코드
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
가이 sensor.Any 아이디어에 대한 UNDEFINE을 말한다입니까?
감사합니다. 내 2 번째 코드에서 회전 매트릭스의 9 개 값을 가져 오려고하는데, 그 값을 얻는 올바른 방법입니까? – MBMJ
수도 있습니다. 나는 그로부터 오랜 시간이 걸렸습니다. 벡터에서 회전 행렬을 계산해도 좋은 결과를 얻지 못했습니다 (비록 내가 뭔가 잘못했을지라도). 내가 아는 전부는 내가 당신에게 준 해결책이 완벽하게 작동한다는 것이다 (나는 여전히 그것을 사용한다). 그리고 구현이 간단하다. – PeterGriffin
이 경우 {(성공) { SensorManager.getOrientation (matrixR, matrixValues);} 여기에 행렬 값을 표시하는 코드 을 사용하여 회전 행렬을 찾습니다. 여기서 matrixR은 회전 행렬이고 나에게 결과를 제공합니다.하지만 i 실제 좌표계를 사용하고 있는지 이해할 수 없습니까? – MBMJ