%% Helper Functions

function R = generateRotationMatrix(axis, theta)
    % rotation_matrix returns the 3x3 rotation matrix associated with 
    % counterclockwise rotation about the given axis by theta radians.
    
    % Normalize the axis
    axis = axis / sqrt(dot(axis, axis));
    
    % Compute the rotation matrix components
    a = cos(theta / 2.0);
    b = -axis(1) * sin(theta / 2.0);
    c = -axis(2) * sin(theta / 2.0);
    d = -axis(3) * sin(theta / 2.0);
    
    % Precompute terms for readability
    aa = a * a; bb = b * b; cc = c * c; dd = d * d;
    bc = b * c; ad = a * d; ac = a * c; ab = a * b;
    bd = b * d; cd = c * d;
    
    % Construct the rotation matrix
    R = [aa + bb - cc - dd, 2 * (bc + ad), 2 * (bd - ac);
         2 * (bc - ad), aa + cc - bb - dd, 2 * (cd + ab);
         2 * (bd + ac), 2 * (cd - ab), aa + dd - bb - cc];
end



