Main Content

Create rotation angles from direction cosine matrix

`[r1 r2 r3] = dcm2angle(n)`

[r1 r2 r3] = dcm2angle(n,s)

[r1 r2 r3] = dcm2angle(n,s,lim)

[r1 r2 r3] = dcm2angle(n,s,lim,action)

[r1 r2 r3] = dcm2angle(n,s,lim,action,tolerance)

`[r1 r2 r3] = dcm2angle(n)`

calculates the set
of rotation angles, `r1`

, `r2`

,
`r3`

, for a given direction cosine matrix,
`n`

. `n`

is a 3-by-3-by-`m`

matrix
containing `m`

direction cosine matrices. `r1`

returns an `m`

array of first rotation angles. `r2`

returns an `m`

array of second rotation angles.
`r3`

returns an `m`

array of third rotation
angles. Rotation angles are output in radians. This function applies only to
direction cosine matrices that are orthogonal with determinant +1. The rotation used
in this function is a passive transformation between two coordinate systems.

`[r1 r2 r3] = dcm2angle(n,s)`

calculates the
set of rotation angles, `r1`

, `r2`

,
`r3`

, for a given direction cosine matrix,
`n`

, and a specified rotation sequence, `s`

.

The default rotation sequence is `'ZYX'`

, where
`r1`

is * z*-axis rotation,

`r2`

is `y`

`r3`

is `x`

Supported rotation sequences are `'ZYX'`

, `'ZYZ'`

,
`'ZXY'`

, `'ZXZ'`

, `'YXZ'`

,
`'YXY'`

, `'YZX'`

, `'YZY'`

,
`'XYZ'`

, `'XYX'`

, `'XZY'`

,
and `'XZX'`

.

`[r1 r2 r3] = dcm2angle(n,s,lim)`

calculates
the set of rotation angles, `r1`

, `r2`

,
`r3`

, for a given direction cosine matrix,
`n`

, a specified rotation sequence, `s`

, and a
specified angle constraint, `lim`

. `lim`

specifies
either `'Default'`

or `'ZeroR3'`

. See Assumptions and Limitations for full definitions of angle
constraints.

`[r1 r2 r3] = dcm2angle(n,s,lim,action)`

performs
`action`

if the direction cosine matrix is invalid (not
orthogonal).

Warning — Displays warning and indicates that the direction cosine matrix is invalid.

Error — Displays error and indicates that the direction cosine matrix is invalid.

None — Does not display warning or error (default).

`[r1 r2 r3] = dcm2angle(n,s,lim,action,tolerance)`

uses a
`tolerance`

level to evaluate if the direction cosine matrix,
`n`

, is valid (orthogonal). `tolerance`

is a
scalar whose default is `eps(2)`

(`4.4409e-16`

).
The function considers the direction cosine matrix valid if these conditions are
true:

The transpose of the direction cosine matrix times itself equals

`1`

within the specified tolerance`tolerance`

(`transpose(n)*n == 1±tolerance`

)The determinant of the direction cosine matrix equals

`1`

within the specified tolerance (`det(n) == 1±tolerance`

).

Determine the rotation angles from direction cosine matrix:

dcm = [1 0 0; 0 1 0; 0 0 1]; [yaw, pitch, roll] = dcm2angle(dcm) yaw = 0 pitch = 0 roll = 0

Determine the rotation angles from multiple direction cosine matrices:

dcm = [ 1 0 0; 0 1 0; 0 0 1]; dcm(:,:,2) = [ 0.85253103550038 0.47703040785184 -0.21361840626067; ... -0.43212157513194 0.87319830445628 0.22537893734811; ... 0.29404383655186 -0.09983341664683 0.95056378592206]; [pitch, roll, yaw] = dcm2angle(dcm,'YXZ') pitch = 0 0.3000 roll = 0 0.1000 yaw = 0 0.5000

Determine the rotation angles from direction matrices validated within tolerance:

dcm = [ 1 0 0; 0 1 0; 0 0 1]; dcm(:,:,2) = [ 0.85253103550038 0.47703040785184 -0.21361840626067; ... -0.43212157513194 0.87319830445628 0.22537893734811; ... 0.29404383655186 -0.09983341664683 0.95056378592206]; [pitch, roll, yaw] = dcm2angle(dcm,'YXZ','Default','None',0.1) pitch = 0 0.3000 roll = 0 0.1000 yaw = 0 0.5000

The `'Default'`

limitations for the `'ZYX'`

, `'ZXY'`

, `'YXZ'`

, `'YZX'`

, `'XYZ'`

,
and `'XZY'`

implementations generate an `r2`

angle
that lies between ±90 degrees, and `r1`

and `r3`

angles
that lie between ±180 degrees.

The `'Default'`

limitations for the `'ZYZ'`

,
`'ZXZ'`

, `'YXY'`

, `'YZY'`

,
`'XYX'`

, and `'XZX'`

implementations generate
an `r2`

angle that lies 0–180 degrees, and `r1`

and
`r3`

angles that lie between ±180 degrees.

The `'ZeroR3'`

limitations for the `'ZYX'`

, `'ZXY'`

, `'YXZ'`

, `'YZX'`

, `'XYZ'`

,
and `'XZY'`

implementations generate an `r2`

angle
that lies between ±90 degrees, and `r1`

and `r3`

angles
that lie between ±180 degrees. However, when `r2`

is
±90 degrees, `r3`

is set to 0 degrees.

The `'ZeroR3'`

limitations for the `'ZYZ'`

,
`'ZXZ'`

, `'YXY'`

, `'YZY'`

,
`'XYX'`

, and `'XZX'`

implementations generate
an `r2`

angle that lies 0–180 degrees, and `r1`

and
`r3`

angles that lie between ±180 degrees. However, when
`r2`

is 0 or ±180 degrees, `r3`

is set to
0 degrees.

`angle2dcm`

| `dcm2quat`

| `quat2angle`

| `quat2dcm`