Traslate and Rotate a point cloud

17 ビュー (過去 30 日間)
Alberto Acri
Alberto Acri 2022 年 11 月 28 日
コメント済み: Jonas 2022 年 11 月 29 日
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.

回答 (1 件)

Jonas
Jonas 2022 年 11 月 28 日
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 件のコメント
Jonas
Jonas 2022 年 11 月 29 日
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

サインインしてコメントする。

製品


リリース

R2021b

Community Treasure Hunt

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

Start Hunting!

Translated by