Rotate a 3D data cloud to align with one axis

12 次查看(过去 30 天)
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
Looky 2020-1-14
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 个)

Image Analyst
Image Analyst 2020-1-15
编辑:Image Analyst 2020-1-15
You might be looking for the view() function, if you want to rotate the whole coordinate system (data plus axes) so that you're looking at it "straight on" or from a certain angle/viewpoint.

类别

Help CenterFile Exchange 中查找有关 Point Cloud Processing 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by