If you need to calculate a rotation matrix from Euler angles, you will have realised that it is not easy to find something usable in C#. It is necessary to rely on development tools such as Unity or similar to find ready-made functions.
Today we are going to look at a solution written in C# which will allow us to solve the problem without too much headaches .
What I am presenting here does not make use of special libraries, so it can be compiled in .NET Core, which guarantees portability on all operating systems supported by the Microsoft framework.
If you are looking for a solution to do the reverse operation, i.e. to derive Euler angles from a rotation matrix, please refer to this article.
Euler Angles to Rotation Matrix
Without wasting any time, here is the solution that allows you, starting from 3 Euler angles (rotation with respect to the X, Y and Z axis), to obtain the relative rotation matrix. The result is strictly dependent on the type of convention you need to use when applying the rotations. In the code in question, I take into account the 3 classic rotation sequences: XYZ, ZYZ and ZYX.
To begin with, let us define two enums that will make the code more readable. In lines 1 – 5, we define the various types of angle units that we want to manage, in our case degrees and radians. On lines 7 – 12, we describe the various axis rotation sequences that we will be managing.
The function, as described by the signature in line 14, takes as input:
- an array of doubles of 3 elements containing the Euler angles;
- the type of rotation of the axes;
- the unit of measurement of the angles passed as first parameter;
and returns a 3 x 3 matrix containing the rotation matrix.
To test the code we have just written, we write a simple program that performs the calculation of the rotation:
- Rx = 180;
- Ry = 0;
- Rz = 180.
The output result will be the 3 x 3 matrix in which the elements are stored in row-major order (i.e. row by row).
|rotM[0,0]||rotM[0, 1]||rotM[0, 2]|
The rotation matrix is nothing more than a matrix operator that allows a vector to be rotated around a given axis in space. It is a very useful tool in several application fields, such as in robotics in solving inverse kinematics problems or in reference system transformations.
In this short article, we have presented a solution in C# that allows the calculation of the rotation matrix from a configuration of Euler angles.