Rotating a 3D meshgrid with rotation matrix

6 visualizaciones (últimos 30 días)
Tomas
Tomas el 19 de Mayo de 2016
Editada: Matt J el 11 de Sept. de 2020
Hello,
I would like to rotate 3D coordinates in a meshgrid. I managed to do what I want, but I'm thinking there is a much smarter way than to go with three for-loops, which becomes very slow. Is there somebody that knows how to go about?
[Y,X,Z] = meshgrid(-Ny:Ny,-Nx:Nx,-Nz:Nz);
Xrot=zeros(size(X));
Yrot=zeros(size(Y));
Zrot=zeros(size(Z));
%
c1=cos(theta);
c2=cos(phi);
c3=cos(gamma);
s1=sin(theta);
s2=sin(phi);
s3=sin(gamma);
R_zyx=[c1*c2 c1*s2*s3-c3*s1 s1*s3+c1*c3*s2;
c2*s1 c1*c3+s1*s2*s3 c3*s1*s2-c1*s3;
-s2 c2*s3 c2*c3];
for i=1:2*Nx+1
for j=1:2*Ny+1
for k=1:2*Nz+1
temp=R_zyx*[X(i,j,k) Y(i,j,k) Z(i,j,k)]';
Xrot(i,j,k)=temp(1);
Yrot(i,j,k)=temp(2);
Zrot(i,j,k)=temp(3);
end
end
end

Respuesta aceptada

Matt J
Matt J el 19 de Mayo de 2016
Editada: Matt J el 19 de Mayo de 2016
temp=[X(:),Y(:),Z(:)]*R_zyx.' ;
sz=size(X);
Xrot=reshape(temp(:,1),sz);
Yrot=reshape(temp(:,2),sz);
Zrot=reshape(temp(:,3),sz);
  4 comentarios
Matt J
Matt J el 11 de Sept. de 2020
sahar kheibarihafshejani's comment moved here:
Hello, i face same problem and wanna to rotate x,y,z position of my plane which each one has been saved in a seperate meshgrid. it seems this code works for me but i am too biginer in matlab can you explane this code alittle?
x(:) will sort al my x position in a just one culomn and then after rotation you reshape it in the previous meshgrid?
how can i make sure the elements will save in a right position?
Matt J
Matt J el 11 de Sept. de 2020
Editada: Matt J el 11 de Sept. de 2020
@sahar,
reshaping a Matlab array variable, whether using x(:) or reshape(x,___) has no reordering effect on the elements of x. The elements are stored in the same memory locations and in the same order, regardless of the fact that the variable referencing them has been reshaped.

Iniciar sesión para comentar.

Más respuestas (0)

Community Treasure Hunt

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

Start Hunting!

Translated by