Rotate 3-D Point Cloud Using Rigid Transformation
34 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Alberto Acri
el 20 de Dic. de 2022
Hi! I need to rotate a point cloud (or .txt file of the type rx3) by a certain angle theta with respect to the x-axis (or y- or z-axis) while keeping its center of gravity G (already calculated) fixed.
I am using the rotation matrix but I am unclear how to keep the center of gravity fixed and rotate only with respect to a given axis.
angle = 180;
angle_rad = deg2rad(angle);
rot_matrix = [ cos(angle_rad) sin(angle_rad) 0 0 ; ...
-sin(angle_rad) cos(angle_rad) 0 0 ; ...
0 0 1 0 ; ...
0 0 0 1 ];
I had initially tried using this code taken from this link but MatLab reports this error: "Unrecognized function or variable 'rigidtform3d'."
ptCloud = pcread('teapot.ply');
figure
pcshow(ptCloud)
xlabel('X')
ylabel('Y')
zlabel('Z')
rotationAngles = [0 0 45];
translation = [0 0 0];
tform = rigidtform3d(rotationAngles,translation)
ptCloudOut = pctransform(ptCloud,tform);
figure
pcshow(ptCloudOut)
xlabel('X')
ylabel('Y')
zlabel('Z')
Thanks to those who can answer me!
p.s. Otherwise if someone can send me this function ("rigidtform3d") since it's like I don't have it!
0 comentarios
Respuesta aceptada
Más respuestas (2)
Bora Eryilmaz
el 20 de Dic. de 2022
Editada: Bora Eryilmaz
el 20 de Dic. de 2022
- First translate the point cloud to the origin using a translation of -G.
- Rotate the point cloud around an axis.
- Translate it back to its center of gravity using a translation of G.
0 comentarios
Torsten
el 20 de Dic. de 2022
Editada: Torsten
el 20 de Dic. de 2022
angle = 180;
angle_rad = deg2rad(angle);
rot_matrix = [ cos(angle_rad) -sin(angle_rad) 0 ; ...
sin(angle_rad) cos(angle_rad) 0 ; ...
0 0 1 ];
ptCloud = pcread('teapot.ply')
gc = mean(ptCloud.Location,1)
figure
pcshow(ptCloud)
xlabel('X')
ylabel('Y')
zlabel('Z')
gc = mean(ptCloud.Location,1)
ptCloudOut = ptCloud.Location - gc;
ptCloudOut = (rot_matrix*ptCloudOut.').';
ptCloudOut = ptCloudOut + gc;
gc_transformed = mean(ptCloudOut,1)
figure
pcshow(ptCloudOut)
xlabel('X')
ylabel('Y')
zlabel('Z')
0 comentarios
Ver también
Categorías
Más información sobre Point Cloud Processing en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!