output a 4d rotation matrix given as input a rotation angle specified as a 4 element array in matlab

main.m
function rot_mat = rotation_matrix(rot_angles)
%ROTATION_MATRIX Outputs a 4D rotation matrix 
%   given an input of 4 elements specifying the 
%   rotation angles around the 4 axes of rotation.
%   The angles must be in radians.

% Unpack the rotation angles into separate variables.
rot_x = rot_angles(1);
rot_y = rot_angles(2);
rot_z = rot_angles(3);
rot_w = rot_angles(4);

% Calculate sin and cos values for each angle.
sin_x = sin(rot_x);
cos_x = cos(rot_x);
sin_y = sin(rot_y);
cos_y = cos(rot_y);
sin_z = sin(rot_z);
cos_z = cos(rot_z);
sin_w = sin(rot_w);
cos_w = cos(rot_w);

% Create the rotation matrix based on the given rotation angles.
% Note: Matrices in MATLAB are specified in row-major order.
rot_mat = [cos_x*cos_y*cos_z*cos_w-sin_x*sin_y*sin_z*sin_w, ...
           cos_x*sin_y*sin_z*cos_w-sin_x*cos_y*cos_z*sin_w, ...
           cos_x*cos_y*sin_z*sin_w-sin_x*sin_y*cos_z*cos_w, ...
           cos_x*sin_y*cos_w+sin_x*cos_y*sin_z*sin_w; ...
           sin_x*cos_y*cos_z*cos_w+cos_x*sin_y*sin_z*sin_w, ...
           sin_x*sin_y*sin_z*cos_w+cos_x*cos_y*cos_z*sin_w, ...
           sin_x*cos_y*sin_z*sin_w+cos_x*sin_y*cos_z*cos_w, ...
           sin_x*sin_y*cos_w-cos_x*cos_y*sin_z*sin_w; ...
           -sin_y*cos_z*cos_w, ...
           sin_y*sin_z*cos_w, ...
           sin_y*cos_z*sin_w, ...
           sin_y*sin_w; ...
           0, 0, 0, 1];
end
1370 chars
39 lines

To use this function, simply call rotation_matrix(rot_angles) and pass in the rotation angles as a 4-element array. The output will be a 4x4 rotation matrix represented as a MATLAB matrix.

related categories

gistlibby LogSnag