erik - 1 year ago 104

Android Question

I have a sensor manager that returns a

`rotationMatrix`

`rotationMatrix`

Trying to interpret blender's answer below, which i am thankful for but not quite there yet, i am trying to get the angle from a rotaion matrix like this:

`float R[] = phoneOri.getMatrix();`

double rmYaw = Math.atan2(R[4], R[0]);

double rmPitch = Math.acos(-R[8]);

double rmRoll = Math.atan2(R[9], R[10]);

i don't know if i am referencing the wrong parts of the matrix or not but i am not getting the results i would think.

i was hoping to get values in degrees, but am getting weird integers.

my matrix is coming from my

`sensorManager`

`public void onSensorChanged(SensorEvent evt) {`

int type=evt.sensor.getType();

if(type == Sensor.TYPE_ORIENTATION){

yaw = evt.values[0];

pitch = evt.values[1];

roll = evt.values[2];

}

if (type == Sensor.TYPE_MAGNETIC_FIELD) {

orientation[0]=(orientation[0]*1+evt.values[0])*0.5f;

orientation[1]=(orientation[1]*1+evt.values[1])*0.5f;

orientation[2]=(orientation[2]*1+evt.values[2])*0.5f;

} else if (type == Sensor.TYPE_ACCELEROMETER) {

acceleration[0]=(acceleration[0]*2+evt.values[0])*0.33334f;

acceleration[1]=(acceleration[1]*2+evt.values[1])*0.33334f;

acceleration[2]=(acceleration[2]*2+evt.values[2])*0.33334f;

}

if ((type==Sensor.TYPE_MAGNETIC_FIELD) || (type==Sensor.TYPE_ACCELEROMETER)) {

float newMat[]=new float[16];

SensorManager.getRotationMatrix(newMat, null, acceleration, orientation);

if(displayOri==0||displayOri==2){

SensorManager.remapCoordinateSystem(newMat,SensorManager.AXIS_X*-1, SensorManager.AXIS_MINUS_Y*-1,newMat);

}else{

SensorManager.remapCoordinateSystem(newMat,SensorManager.AXIS_Y, SensorManager.AXIS_MINUS_X,newMat);

}

matrix=newMat;

`0.9916188, -0.12448014, -0.03459576, 0.0`

0.12525482, 0.9918981, 0.021199778, 0.0

0.031676512,-0.025355382, 0.9991765, 0.0

0.0, 0.0, 0.0, 1

`double rmPitch = Math.toDegrees( Math.acos(R[10]));`

Answer Source

Yaw, pitch and roll correspond to Euler angles. You can convert a transformation matrix to Euler angles pretty easily: