break; return SensorManager.remapCoordinateSystem(inR, xDir, yDir, outR);
@Override protected void onSensorEvent(SensorEvent sensorEvent) { // Get rotation matrix float[] rotationMatrix = new float[16]; SensorManager.getRotationMatrixFromVector(rotationMatrix, sensorEvent.values); // Remap coordinate system float[] remappedRotationMatrix = new float[16]; SensorManager.remapCoordinateSystem(rotationMatrix, SensorManager.AXIS_X, SensorManager.AXIS_Z, remappedRotationMatrix); // Convert to orientations float[] orientations = new float[3]; SensorManager.getOrientation(remappedRotationMatrix, orientations); // Convert values in radian to degrees for (int i = 0; i < 3; i++) { orientations[i] = (float) (Math.toDegrees(orientations[i])); } rotationAngleListener.onRotation(orientations[0], orientations[1], orientations[2]); } }
break; SensorManager.remapCoordinateSystem( remappedPhoneMatrix, xAxis, yAxis, phoneInWorldSpaceMatrix); SensorManager.remapCoordinateSystem( phoneInWorldSpaceMatrix, SensorManager.AXIS_X,
private float[] remapToDisplayRotation(float[] inR) { int h, v; float[] outR = new float[9]; switch (display.getRotation()) { case Surface.ROTATION_90: h = SensorManager.AXIS_Y; v = SensorManager.AXIS_MINUS_X; break; case Surface.ROTATION_180: h = SensorManager.AXIS_MINUS_X; v = SensorManager.AXIS_MINUS_Y; break; case Surface.ROTATION_270: h = SensorManager.AXIS_MINUS_Y; v = SensorManager.AXIS_X; break; case Surface.ROTATION_0: default: return inR; } SensorManager.remapCoordinateSystem(inR, h, v, outR); return outR; }
switch (screenRotation) { case Surface.ROTATION_0: SensorManager.remapCoordinateSystem(rotationMatrixTemp, SensorManager.AXIS_X, SensorManager.AXIS_Y, rotationMatrix); break; case Surface.ROTATION_90: SensorManager.remapCoordinateSystem(rotationMatrixTemp, SensorManager.AXIS_Y, SensorManager.AXIS_MINUS_X, rotationMatrix); break; case Surface.ROTATION_180: SensorManager.remapCoordinateSystem(rotationMatrixTemp, SensorManager.AXIS_MINUS_X, SensorManager.AXIS_MINUS_Y, rotationMatrix); break; case Surface.ROTATION_270: SensorManager.remapCoordinateSystem(rotationMatrixTemp, SensorManager.AXIS_MINUS_Y, SensorManager.AXIS_X, rotationMatrix); break;
private void getOrientation(final float[] rotateMatrix, final float[] result) { switch (mRotation) { case Surface.ROTATION_0: SensorManager.getOrientation(rotateMatrix, result); return; case Surface.ROTATION_90: SensorManager.remapCoordinateSystem( rotateMatrix, SensorManager.AXIS_Y, SensorManager.AXIS_MINUS_X, outR); break; case Surface.ROTATION_180: SensorManager.remapCoordinateSystem( rotateMatrix, SensorManager.AXIS_Y, SensorManager.AXIS_MINUS_X, outR2); SensorManager.remapCoordinateSystem( outR2, SensorManager.AXIS_Y, SensorManager.AXIS_MINUS_X, outR); break; case Surface.ROTATION_270: SensorManager.remapCoordinateSystem( outR, SensorManager.AXIS_MINUS_Y, SensorManager.AXIS_MINUS_X, outR); break; } SensorManager.getOrientation(outR, result); }
public float getAzimuth(float decl) { SensorManager.remapCoordinateSystem(currentOrientationRotationMatrix.matrix, SensorManager.AXIS_X, SensorManager.AXIS_Y, RMatrixRemapped); SensorManager.getOrientation(RMatrixRemapped, orientation); if (orientation[0] >= 0) { // Azimuth-Calculation (rad in degree) + difference to true north (decl) return (orientation[0] * 57.29577951f + decl); } else { // Azimuth-Calculation (rad in degree) +360 + difference to true north (decl) return (orientation[0] * 57.29577951f + 360 + decl); } } }
SensorManager.remapCoordinateSystem(mRotationMatrix, SensorManager.AXIS_Y, SensorManager.AXIS_MINUS_X, mOrientedRotationMatrix); break; SensorManager.remapCoordinateSystem(mRotationMatrix, SensorManager.AXIS_MINUS_X, SensorManager.AXIS_MINUS_Y, mOrientedRotationMatrix); break; SensorManager.remapCoordinateSystem(mRotationMatrix, SensorManager.AXIS_MINUS_Y, SensorManager.AXIS_X, mOrientedRotationMatrix); break;
SensorManager.remapCoordinateSystem(mRotationMatrix, AXIS_Y, AXIS_MINUS_X, mOrientedRotationMatrix); break; SensorManager.remapCoordinateSystem(mRotationMatrix, AXIS_MINUS_X, AXIS_MINUS_Y, mOrientedRotationMatrix); break; SensorManager.remapCoordinateSystem(mRotationMatrix, AXIS_MINUS_Y, AXIS_X, mOrientedRotationMatrix); break;
private boolean calcOrientation() { // If gravity and geomag have values then find rotation matrix boolean success = false; if (gravity != null && geomag != null){ // checks that the rotation matrix is found success = SensorManager.getRotationMatrix(inR, I, gravity, geomag); if (success){ // Re-map coordinates so y-axis comes out of camera SensorManager.remapCoordinateSystem(inR, SensorManager.AXIS_X, SensorManager.AXIS_Z, outR); // Finds the Azimuth and Pitch angles of the y-axis with // magnetic north and the horizon respectively SensorManager.getOrientation(outR, orientVals); azimuth = orientVals[0]*RAD_TO_DEG; pitch = orientVals[1]*RAD_TO_DEG; roll = orientVals[2]*RAD_TO_DEG; if (magAccuracy<gravAccuracy) { accuracy = magAccuracy; } else { accuracy = gravAccuracy; } } else { } } return success; }
SensorManager.remapCoordinateSystem(inR, x_axis, y_axis, outR);
private void updateCoordinate(float[] rotationVector) { SensorManager.getRotationMatrixFromVector(mRotationMatrix, rotationVector); SensorManager.remapCoordinateSystem(mRotationMatrix, mRemappedXAxis, mRemappedYAxis, mRemappedRotationMatrix); SensorManager.getOrientation(mRemappedRotationMatrix, mOrientationVals); if (mCurrentRotation == Surface.ROTATION_0) { //For some reasons, there is a difference of 100° on the Y coordinate //between landscape and portrait orientation. This is a poor //attempt at fixing this issue. mOrientationVals[2] -= 1.7453292519; } onSmoothCoordinateChanged(mOrientationVals.clone()); }
private void update(float[] vectors) { int AMP_MAX = 50; int AMPLIFICATION = AMP_MAX / mControls.getGyroAmplification(); float[] rotationMatrix = new float[9]; SensorManager.getRotationMatrixFromVector(rotationMatrix, vectors); int worldAxisX = SensorManager.AXIS_X; int worldAxisY = SensorManager.AXIS_Y; float[] adjustedRotationMatrix = new float[9]; SensorManager.remapCoordinateSystem(rotationMatrix, worldAxisX, worldAxisY, adjustedRotationMatrix); float[] orientation = new float[3]; SensorManager.getOrientation(adjustedRotationMatrix, orientation); float pitch = (orientation[2] * FROM_RADS_TO_DEGS * -1) / AMPLIFICATION; float roll = (orientation[1] * FROM_RADS_TO_DEGS) / AMPLIFICATION; mSensorRoll = roll; mSensorPitch = pitch; updateFlightData(); }
public void onSensorChanged(SensorEvent event) { switch (event.sensor.getType()) { case Sensor.TYPE_MAGNETIC_FIELD: mags = event.values; break; case Sensor.TYPE_ACCELEROMETER: accels = event.values; break; } if (mags != null && accels != null) { gravity = new float[9]; magnetic = new float[9]; SensorManager.getRotationMatrix(gravity, magnetic, accels, mags); float[] outGravity = new float[9]; SensorManager.remapCoordinateSystem(gravity, SensorManager.AXIS_X, SensorManager.AXIS_Z, outGravity); SensorManager.getOrientation(outGravity, values); azimuth = values[0] * 57.2957795f; pitch = values[1] * 57.2957795f; roll = values[2] * 57.2957795f; roll += 90; mags = null; accels = null; updateOrientation((int) roll); } }
SensorManager.remapCoordinateSystem(q, SensorManager.AXIS_X, SensorManager.AXIS_Z, q);
break; case Surface.ROTATION_90: SensorManager.remapCoordinateSystem(rotationMatrix, SensorManager.AXIS_Y, SensorManager.AXIS_MINUS_X, rotationMatrixAdjusted); break; case Surface.ROTATION_180: SensorManager.remapCoordinateSystem(rotationMatrix, SensorManager.AXIS_MINUS_X, SensorManager.AXIS_MINUS_Y, rotationMatrixAdjusted); break; case Surface.ROTATION_270: SensorManager.remapCoordinateSystem(rotationMatrix, SensorManager.AXIS_MINUS_Y, SensorManager.AXIS_X, rotationMatrixAdjusted);
case Surface.ROTATION_0: SensorManager.remapCoordinateSystem(rotationMatrixA, SensorManager.AXIS_X, SensorManager.AXIS_Z, rotationMatrixB); break; case Surface.ROTATION_90: SensorManager.remapCoordinateSystem(rotationMatrixA, break; case Surface.ROTATION_180: SensorManager.remapCoordinateSystem(rotationMatrixA, SensorManager.AXIS_X, SensorManager.AXIS_Z, rotationMatrixB); break; case Surface.ROTATION_270: SensorManager.remapCoordinateSystem(rotationMatrixA, SensorManager.AXIS_MINUS_Z, SensorManager.AXIS_X, rotationMatrixB);
public void calculateAzimuth() { SensorManager.getRotationMatrix(RMatrix, iMatrix, gravity, magn); SensorManager.remapCoordinateSystem(RMatrix, SensorManager.AXIS_X, SensorManager.AXIS_Y, RMatrixRemapped); SensorManager.getOrientation(RMatrixRemapped, orientation); Matrix.transposeM(RMatrixTranspose, 0, RMatrix, 0); Matrix.multiplyMV(linearRemapped, 0, RMatrixTranspose, 0, linear, 0); //If Gyroscope exists, use ImprovedOrientationProvider, else use accelerometer and magentic field if (gyroExists) { azimuth = mOrientationProvider.getAzimuth(decl); } else { if (orientation[0] >= 0) { // Azimuth-Calculation (rad in degree) azimuth = (orientation[0] * 57.29577951f + decl); } else { // Azimuth-Calculation (rad in degree) +360 azimuth = (orientation[0] * 57.29577951f + 360 + decl); } if (azimuth >= 360) { azimuth -= 360; } } }
SensorManager.remapCoordinateSystem(mSensorialRotationRotationMatrix, SensorManager.AXIS_X, SensorManager.AXIS_Z, mSensorialRotationRotationMatrix); SensorManager.getOrientation(mSensorialRotationRotationMatrix, mSensorialRotationOrientationData); float yaw = mSensorialRotationOrientationData[0] * PLConstants.kToDegrees;
SensorManager.remapCoordinateSystem(mSensorialRotationRotationMatrix, SensorManager.AXIS_X, SensorManager.AXIS_Z, mSensorialRotationRotationMatrix); SensorManager.getOrientation(mSensorialRotationRotationMatrix, mSensorialRotationOrientationData); float yaw = mSensorialRotationOrientationData[0] * PLConstants.kToDegrees;