90° clockwise rotation of 2D coordinates
28 次查看(过去 30 天)
显示 更早的评论
Hi. I cannot understand why the 90° clockwise rotation of the attached 2D coordinates (matrix.txt) is not done.
I have tried two different ways but I do not get the desired result.
1st way (using "rot90"):
matrix = importdata('matrix.txt');
Rmatrix = rot90(matrix,3); % I have to rotate 3 times 90° counterclockwise
figure
plot(Rmatrix(1,:), Rmatrix(2,:), 'k.')
axis equal
xlim([0 512]);
ylim([0 512]);
2nd way (using rotation matrix, more convenient):
matrix = importdata('matrix.txt');
theta = 90;
R = [cos(theta) -sin(theta); sin(theta) cos(theta)];
Rmatrix = R*matrix';
figure
plot(Rmatrix(1,:), Rmatrix(2,:), 'k.')
axis equal
xlim([0 512]);
ylim([0 512]);
2 个评论
Adam Danz
2022-12-16
As @Voss mentioned, rot90 rotates the array of data. Look how this 4x3 matrix turns into a 3x4 matrix and the top row moves to the first column and it gets fliped as if you moved your monitor 90deg counter clockwise.
x = randi(9,4,3)
rot90(x)
What is the problem with your second method using the rotation matrix?
采纳的回答
Matt J
2022-12-17
编辑:Matt J
2022-12-17
2nd way (using rotation matrix, more convenient):
Your implementation of this has several problems:
- You try to rotate by 90 degrees once, instead of 3 times
- Your rotation angle theta is expressed in degrees instead of radians
- You are rotating about the origin, which means the rotated coordinates cannot lie in the range [0,512].
Here's what you might have intended:
matrix = importdata('matrix.txt');
theta = 90*3;
R = [cosd(theta) -sind(theta); sind(theta) cosd(theta)];
c=mean(matrix,1);
Rmatrix = (matrix-c)*R'+c;
plot(matrix(:,1), matrix(:,2), 'k.'); hold on
plot(Rmatrix(:,1), Rmatrix(:,2), 'r.'); hold off
axis equal
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Interactions, Camera Views, and Lighting 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!



