If I have a vector v=(x,y,z) and would like to transform another vector u by using only rotations about the coordinate axes to be in the direction of v, how can I find required angles and the order of applying the rotations to align u with v. I my case u is initially directed along one of the basis vectors.
For example if v=(1,1,1) and u=(1,0,0) I can find the angle between the v and z axis to be 54.7 Deg and the angle that v projection onto xy plane makes with x axis is 45 Deg. Now using the rotation matrices to rotate u first about y axis and then about z axis aligns the u vector with v.
uv = rotz(45)*roty(54.7)*u'
uv will be aligned with v ( rotz(45) and roty(54.7) are corresponding rotation matrices about y and z axis) The above procedure seems rather cumbersome and not general, also if I switch rotation sequence it will not work.
Answers with octave/matlab example/implementations are welcome.
Here is what I have so far in octave
% initial vector
ux = [1 0 0];
%uy = [0 1 0]';
%uz = [0 0 1]';
% for example, vector to align to
v = [1 1 1];
% find a/b/c angles for rotation matrices
% and sequence of operations
...
rotx = rotv([1,0,0],a*pi()/180);
roty = rotv([0,1,0],b*pi()/180);
rotz = rotv([0,0,1],c*pi()/180);
% rotate the initial vector to be aligned with v
rotmat = % rotx*roty*rotz rotation sequence ?
uv=rotmat*ux';
% check the alignment
th = acosd(dot(v,uv)/(norm(v)*norm(uv)))