Rotating and shifting a meshgrid

Hello,
I have a 257x257 X,Y coordinate meshgrid that I need to rotate by 10 degrees (counterclockwise) and then move it along the x and y axis by adding a certain number to it (175.5362) in order to move it to the right location. This is what I have so far:
%Create the meshgrid
Xinit = 0:3125:800000;
Yinit = 0:3125:800000;
[Xq,Yq] = meshgrid(Xinit,Yinit);
When doing it in vector arrays I would do this:
theta=-10; %TO ROTATE CLOCKWISE BY X DEGREES
R=[cosd(theta) -sind(theta); sind(theta) cosd(theta)]; %CREATE THE MATRIX
rotXY=XY*R'; %MULTIPLY VECTORS BY THE ROT MATRIX
But this is a 257x257 matrix and I get this subsequently:
"Error using *
Inner matrix dimensions must agree."
I assume the second part of my question is just a matter of doing this:
%SHIFTING
Xq=Xq+175.5362;
Yq=Yq+175.5362;
Apologies if this is something very simple that I am missing again,
Thank you,
Pavlos

 Respuesta aceptada

Star Strider
Star Strider el 11 de Dic. de 2018
One approach:
%Create the meshgrid
Xinit = 0:3125:800000;
Yinit = 0:3125:800000;
[Xq,Yq] = meshgrid(Xinit,Yinit);
Z = sin(Xq/40000) .* cos(Yq/40000); % ‘Z’ To Provide A Surface
figure
mesh(Xq,Yq,Z) % Original
grid on
XY = [Xq(:) Yq(:)]; % Create Matrix Of Vectors
theta=-10; %TO ROTATE CLOCKWISE BY X DEGREES
R=[cosd(theta) -sind(theta); sind(theta) cosd(theta)]; %CREATE THE MATRIX
rotXY=XY*R'; %MULTIPLY VECTORS BY THE ROT MATRIX
Xqr = reshape(rotXY(:,1), size(Xq,1), []);
Yqr = reshape(rotXY(:,2), size(Yq,1), []);
%SHIFTING
Xqrs = Xqr+175.5362;
Yqrs = Yqr+175.5362;
figure
mesh(Xqrs, Yqrs, Z) % Rotated & Shifted
grid on
See if that gives you the result you want.

4 comentarios

Pavlos Farangitakis
Pavlos Farangitakis el 11 de Dic. de 2018
Hi,
It works absolutely fine! Thank you so much!
Pavlosrotgrid.JPG
Star Strider
Star Strider el 11 de Dic. de 2018
As always, my pleasure!
Scott Smith
Scott Smith el 3 de Oct. de 2022
This was very helpful! I was trying to follow what imrotate does to the x and y positions of an image that has x and y coordinate data (after upscaling the image), your answer was invaluble! Thank you!
Star Strider
Star Strider el 3 de Oct. de 2022
@Scott Smith — My pleasure!

Iniciar sesión para comentar.

Más respuestas (1)

Matt J
Matt J el 11 de Dic. de 2018
Editada: Matt J el 11 de Dic. de 2018
theta=-10;
shift=[1,1]*175.5362;
R=[cosd(theta) -sind(theta); sind(theta) cosd(theta)];
szx=size(Xq);
XY=reshape( [Xq(:)*Yq(:)]*R.' + shift ,[sz,2]);
Xq=XY(:,:,1);
Yq=XY(:,:,2);

Categorías

Productos

Versión

R2017a

Preguntada:

el 11 de Dic. de 2018

Comentada:

el 3 de Oct. de 2022

Community Treasure Hunt

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

Start Hunting!

Translated by