Given a matrix, I want to get a 2d vector that I can later use like this:

`Matrix.CreateFromYawPitchRoll(_currRotation.X, _currRotation.Y, 0f))`

And will get the same original matrix I had (ignore scale and position for now).
Anyone knows how do I get that 2d vector?

Thanks!

Alkher
April 18, 2017, 5:52am
2
You want the inverse rotation given 2 axis right?

Kwyrky
April 18, 2017, 9:29am
3
I think he wants to calculate the currRotation parameters for a given matrix, which then reproduce the matrix when used as parameters in the Matrix.CreateFromYawPitchRoll method.

Given â€śoriginalMatrixâ€ť from unknown source, I want this:

```
Vector2 rotation = <some_magic>(originalMatrix);
Matrix copyMatrix = Matrix.CreateFromYawPitchRoll(rotation.X, rotation.Y, 0f))
copyMatrix == originalMatrix; // true!
```

Solved it:

```
/// <summary>
/// Extract yaw, pitch and roll from existing matrix.
/// </summary>
/// <param name="matrix">Matrix to extract from.</param>
/// <param name="yaw">Out yaw value.</param>
/// <param name="pitch">Out pitch value.</param>
/// <param name="roll">Out roll value.</param>
public void ExtractYawPitchRoll(Matrix matrix, out float yaw, out float pitch, out float roll)
{
yaw = (float)System.Math.Atan2(matrix.M13, matrix.M33);
pitch = (float)System.Math.Asin(-matrix.M23);
roll = (float)System.Math.Atan2(matrix.M21, matrix.M22);
}
```

Based on the code from here: https://github.com/cureos/aforge/blob/master/Sources/Math/Matrix4x4.cs#L239

1 Like