Traslate and Rotate a point cloud

15 views (last 30 days)
Alberto Acri
Alberto Acri on 28 Nov 2022
Commented: Jonas on 29 Nov 2022
Hi! I have a point cloud (.txt file with R rows and 3 columns).
I want to translate the point cloud from the center of gravity G = [100, 100, 100] to a point A = [0,0,0].
And possibly also rotate it by a certain angle.

Answers (1)

Jonas
Jonas on 28 Nov 2022
if you have a matrix nx3, with each row being one set of point corrdinates you can translate first and rotate afterwards using subtraction
points=[1 0 0; 2 0 0; 3 0 0; 4 0 0]+[100 80 50]; % one point per row
tiledlayout(2,1);
nexttile()
scatter3(points(:,1),points(:,2),points(:,3))
translateBy=[100 50 30]; % row vector
% in degree
aroundX=0;
aroundY=90;
aroundZ=90;
% first matrix flip because rotation matrix want one ppoint per column
% second matrix flip
rotPoints=(rotz(aroundZ)*roty(aroundY)*rotx(aroundX)*(points-translateBy)')'
rotPoints = 4×3
-30 20 -1 -30 20 -2 -30 20 -3 -30 20 -4
nexttile
scatter3(rotPoints(:,1),rotPoints(:,2),rotPoints(:,3))
  2 Comments
Alberto Acri
Alberto Acri on 28 Nov 2022
Edited: Alberto Acri on 28 Nov 2022
Thank you for your answer @Jonas.
But how can I do it if I want to translate the point cloud from the center of gravity G = [100, 140, 50] to a point A = [0,0,0]?
I want to get something like this:
Jonas
Jonas on 29 Nov 2022
if you have apoint cloud with center of gravity [100, 140, 50] and you want to move the center of gravity to [0,0,0], then just subtract the given coordinates before rotation.
-> set translateBy to [100, 140, 50]
of course your center of gravity moves with the points, so G would equal A afterwards

Sign in to comment.

Products


Release

R2021b

Community Treasure Hunt

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

Start Hunting!