# Rotate a 3D data cloud to align with one axis

5 views (last 30 days)
Nima Mirzaeian on 13 Jan 2020
Edited: Image Analyst on 15 Jan 2020
Hello! I have a cloud of data points in form of a spindle. How can I rotate the entire set so that the spindle long axis align with x axis? Thank you!

Looky on 14 Jan 2020
I'm not sure if any built in functions exist for this purpose.
However, one mathematical way would be the following:
1. Determine long axis of the spindle(how to do this depends on how you create your spindle). Save as vector r and normalize it: r=r/norm(r);
2. Determine angle between r and the x-axis, use dot product between r and (1, 0, 0) => angle=acosd(dot(r,[1, 0, 0]))
3. Determine rotation-vector u by crossing x-axis and r: u=cross([1,0,0],r);u=u/norm(u);
4. Implement rotation matrix, see here: Wiki RotMat
5. Multiply the vector representation of every single point with the rotation matrix
Example implementation of the rotation matrix(angle in degree):
u=u/norm(u);
rotMat=eye(3)*cosd(angle(1))+sind(angle(1))*[0,-u(3), u(2);u(3),0,-u(1);-u(2),u(1) 0]+(1-cosd(angle(1)))* [u(1)^2, u(1)*u(2), u(1)*u(3); u(1)*u(2), u(2)^2, u(2)*u(3); u(1)*u(3), u(2)*u(3), u(3)^2 ];
vector=vector*rotMat;
vector=vector/norm(vector);

#### 1 Comment

Nima Mirzaeian on 15 Jan 2020
Thanks!! It worked!