# HELP_euler2DCM

Below is a demonstration of the features of the euler2DCM function

## Contents

```clear; close all; clc;
```

## Syntax

[Q]=euler2DCM(a);

## Description

This function uses the input Euler angle set a, a 1x3 vector, to compute a rotation tensor Q, also known as a direction cosine matrix (DCM). See also DCM2euler

## Examples

Plot settings

```fontSize=25;
```

## Setting up rotation matrices based on angles.

Get example patch data

```[F,V]=parasaurolophus;
```

Defining sets of Euler angles for X, Y and Z axis rotation

```E1=[0.5*pi 0 0]; %Just x
E2=[0 0.5*pi 0]; %Just y
E3=[0 0 0.5*pi]; %Just z
E4=[0.25*pi 0.25*pi 0.25*pi]; %All
```

Use euler2DCM function to define the rotation matrices

```[R1]=euler2DCM(E1);
[R2]=euler2DCM(E2);
[R3]=euler2DCM(E3);
[R4]=euler2DCM(E4);
```

Rotate the coordinates. One may define the rotation in the form V*R or (R*V')' depending if pre-, or post-rotation is applied, whereby V*R=(R'*V')'.

```V1=(R1*V')';
V2=(R2*V')';
V3=(R3*V')';
V4=(R4*V')';
```

Plotting data

```hf=cFigure;

subplot(2,2,1);
title('X-axis rotation','FontSize',fontSize);
gpatch(F,V,'kw','none',0.5);
gpatch(F,V1,'rw');
axisGeom(gca,fontSize);

subplot(2,2,2);
title('Y-axis rotation','FontSize',fontSize);
gpatch(F,V,'kw','none',0.5);
gpatch(F,V2,'gw');
axisGeom(gca,fontSize);

subplot(2,2,3);
title('Z-axis rotation','FontSize',fontSize);
gpatch(F,V,'kw','none',0.5);
gpatch(F,V3,'bw');
axisGeom(gca,fontSize);

subplot(2,2,4);
title('Off-axis rotation','FontSize',fontSize);
gpatch(F,V,'kw','none',0.5);
gpatch(F,V4,'yw');
axisGeom(gca,fontSize);

drawnow;
``` A second output can also be requested which is the inverse rotation matrix.

```[Q,Qi]=euler2DCM([randn(1,3)*pi]);
Q
Qi
```
```Q =

0.8566   -0.3911   -0.3366
0.3092    0.9113   -0.2720
0.4131    0.1289    0.9015

Qi =

0.8566    0.3092    0.4131
-0.3911    0.9113    0.1289
-0.3366   -0.2720    0.9015

```

i.e. such that the following :

```Vr=(Q*V')'; %The rotated coordinates
Vn=(Qi*Vr')'; %The normal coordinates after transforming back the rotated coordinates using inverse matrix
```

Note that the sum of squared differences for instance is nearly zero

```D=sum((V(:)-Vn(:)).^2)
```
```D =

8.5943e-29

```

## Creating multiple rotation matrices

It is possible to define multiple rotation matrices at once by specifying a multi-row angle set

```E=[0.25*pi 0 0; 0 0.5*pi 0]; %E.g. two angle sets are specified, 1 for each row
```

In this case the rotation matrices are stacked in the 3rd dimension

```[Q]=euler2DCM(E)
```
```Q(:,:,1) =

1.0000         0         0
0    0.7071   -0.7071
0    0.7071    0.7071

Q(:,:,2) =

0.0000         0    1.0000
0    1.0000         0
-1.0000         0    0.0000

```

## Using symbolic angles

```try
syms a b c
[Q1]=euler2DCM([a 0 0])
[Q2]=euler2DCM([0 b 0])
[Q3]=euler2DCM([0 0 c])
[Q4]=euler2DCM([a b c])
catch
warning('Symbolic toolbox likely missing')
end
```
```
Q1 =

[ 1,      0,       0]
[ 0, cos(a), -sin(a)]
[ 0, sin(a),  cos(a)]

Q2 =

[  cos(b), 0, sin(b)]
[       0, 1,      0]
[ -sin(b), 0, cos(b)]

Q3 =

[ cos(c), -sin(c), 0]
[ sin(c),  cos(c), 0]
[      0,       0, 1]

Q4 =

[                        cos(b)*cos(c),                       -cos(b)*sin(c),         sin(b)]
[ cos(a)*sin(c) + cos(c)*sin(a)*sin(b), cos(a)*cos(c) - sin(a)*sin(b)*sin(c), -cos(b)*sin(a)]
[ sin(a)*sin(c) - cos(a)*cos(c)*sin(b), cos(c)*sin(a) + cos(a)*sin(b)*sin(c),  cos(a)*cos(b)]

``` GIBBON www.gibboncode.org

Kevin Mattheus Moerman, [email protected]

GIBBON footer text

GIBBON: The Geometry and Image-based Bioengineering add-On. A toolbox for image segmentation, image-based modeling, meshing, and finite element analysis.

Copyright (C) 2019 Kevin Mattheus Moerman

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.