Any rotation matrix about the origin can be expressed as the product of three rotations, one about each axis. So what you are asking is certainly possible. But I am not quite sure why you want to express the rotation like this : it is nothing like so meaningful as finding the axis and the amount of rotation, and the calculation is messy.
I presume you know how to calculate the rotation matrix using conjugation: i.e. pick a new orthonormal coordinate system with one axis the axis of rotation and one the vector. The matrix for the rotation is easy in the new coordinate system, and then you use the usual formula for change of basis to calculate the matrix in the original coordinate system. Given your vector is nice this should be an easy calculation
Then you want to decompose this matrix into rotation about the x,y,z axes. Obviously you get a different answer depending on what order you do things in. The answer is not usually unique - you can often get to the final position in more than one way.
I wrote some C code to do this calculation for a general rotation matrix. I think I decomposed on the basis of rotating first about x,then y,then z. I worked things out by calculating the product of three rotations and then used trig identities to see how I could recover the original values.
To understand the code:
transform is my 3*3 matrix, and I address it as a vector, so transform is the first entry in the first row, transform is the last entry on the second row.
atan2 calculates an angle between -pi and pi radians. atan2(y,x) is arctan(y/x) + some multiple of half pi chosen based on the quadrant implied by the sign of y and x.
y_rot = asin(transform);
if (transform || transform)
x_rot = -atan2(transform,transform);
z_rot = -atan2(transform,transform);
if (x_rot < 0 && z_rot < 0)
y_rot = pi-y_rot;
x_rot = atan2(transform,-transform);
z_rot = atan2(transform,-transform);
x_rot = atan2(transform,transform);
if (transform < 0)
x_rot = -x_rot;
z_rot = 0;
I should warn you that I do everything with left hand coordinates because that is more natural for my application. However, I don't think that will make any difference to the calculation at all.