Hello ,
I want to try to spin a matrix, but I can not. I have three 240x320 matrices (x, y, z, which are the cartesian points of a stereo camera scan) and have done 4 scans (front, right, left, back) and I want to rotate the Cartesian arrays with 90 degrees, 180 degrees in the back and 270 left to create a 360 degree view. and the rotation matrix, from what I read, has the size of 3x3 (rotate = [cosd (90) -sind (90) 0; sind (90) cosd (90) 0; 0 0 0 1]). I tried the following:
rotz = [cosd (90) -sind (90) 0; sind (90) cosd (90) 0; 0 0 0 1 ];
for i = 1:240
for j = 1:320
[0 0 x11(i,j)] = rotz.*[0 0 x11(i,j)];
end
end
or :
for i = 1:240
for j = 1:320
x11(i,j) = rotz.*x11(i,j);
end
end
Can anyone tell me how can I do that multiplication? Or if there is another option to rotate the matrix?
Thank you have a good day

6 Comments

"three 240x320 matrices (x, y, z, which are the cartesian points..." - this is not clear to me. Which of the x, y and z components are included in the matrices in which dimension?
I would replace cosd(90) by 0 and sind(90) by 1.
rotz = [cosd (90) -sind (90) 0; sind (90) cosd (90) 0; 0 0 0 1 ];
% ^ ^ ^ ^ 4 elements?!
Do you only want to move the elements inside the matrix? Then tranpose and flip will help you.
Bjorn Gustavsson
Bjorn Gustavsson on 25 Jun 2019
Edited: Bjorn Gustavsson on 25 Jun 2019
Nah, don't constrain the rotation-matrix like that - sooner or later the OP will need to rotate something an arbitrary angle around z - then this version is way easire to generalize instead of a hard-coded variant - if something change to radians from degrees.
Jan
Jan on 25 Jun 2019
@Bjorn: Maybe the OP wants to rotate the matrix elements, not the X and Y values. I'm puzzled by the current descriptions. It does not look like "three 240x320 matrices" are the correct operand for a [3x3] rotation matrix.
@Jan, fair point, I guessed away from the 3x3 rotation matrix and "decided" that there were 240x320 points with x, y, and z - coordinates stored in 3 separate matrices...
@Jan :Excuse me, there are 3 matrices with dimensions of 240x320, these matrices are Cartesian coordinates. After scanning, the program gave me a depth matrix of 240x340, and with azimuth and elevation, I found out the Cartesian coordinates, which are these 3 arrays (x, y, z). and the rotation matrix in the last line has 3 elements, just wrong and I added a zero when I copied the code. The rotation matrix is rotate = [cosd (90) -sind (90) 0; sind (90) cosd (90) 0; 0 0 1]; , but it still does not work
What part of my solution doesn't do it for you?

Sign in to comment.

 Accepted Answer

Maybe something like this for your coordinates:
r_all = [x(:),y(:),z(:)];
r_rotated = (rotz*r_all')';
Xr = x;
Yr = y;
Zr = z;
Xr(:) = r_rotated(:,1);
Yr(:) = r_rotated(:,2);
Zr(:) = r_rotated(:,3);
HTH

More Answers (0)

Categories

Community Treasure Hunt

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

Start Hunting!