在獲得旋轉矩陣值時,它包含public static boolean getRotationMatrix (float[] R, float[] I, float[] gravity, float[] geomagnetic)
這裏我怎樣才能計算出float[] gravity
? 我發現同時使用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));
}
我的問題是代碼的樣本在那裏計算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想法?
Thanks。查看我的第二個代碼,我試圖獲得旋轉矩陣的9個值,它是獲得這些值的正確方法 – MBMJ
它可能是。我做了很長一段時間,從矢量計算旋轉矩陣並沒有給我很好的結果(儘管我可能做了錯誤的事情)。我所知道的是,我給你的解決方案非常完美(我仍然使用它)並且實施起來很簡單。 – PeterGriffin
我找到旋轉矩陣通過使用這個if(成功){SensorManager.getOrientation(matrixR,matrixValues); //代碼在這裏顯示矩陣值' 其中矩陣R是旋轉矩陣並給我結果。但是我不明白它是用真正的座標系嗎? – MBMJ