Matlab中完成图像旋转(坐标旋转)
通过极坐标的转化,将点阵进行旋转,得到旋转后点阵的坐标并绘制出来,以下为代码。
y=xlsread("D:\temp\meigu\tianran\unit_coordinates - 副本.csv","unit_coordinates - 副本","C1:C4139");
x=xlsread("D:\temp\meigu\tianran\unit_coordinates - 副本.csv","unit_coordinates - 副本","B1:B4139");
plot(x,y,"*")
for i=1:length(x)
z(i)=y(i)/x(i); %正切值,也是角度
a(i)=sqrt(x(i)^2+y(i)^2); %极径
if y(i)>=0&x(i)>=0
z_1(i)=atan(z(i))*180/pi; %tan的值总取在-pi/2到pi/2之间,所以二三象限的角度需要用一四象限的角度表示
end
if y(i)>=0&x(i)<0
z_1(i)=atan(z(i))*180/pi+180;
end
if y(i)<0&x(i)<=0
z_1(i)=atan(z(i))*180/pi+180;
end
if y(i)<0&x(i)>0
z_1(i)=atan(z(i))*180/pi;
end
end
for i =1:length(x)
x2(i)=a(i)*cos(z_1(i)*pi/180-pi/4);
y2(i)=a(i)*sin(z_1(i)*pi/180-pi/4);
end
%hold on;
figure;
plot(x2,y2,"*r")
大致思路如下:
- 首先读取坐标点(分别读取x、y坐标)
- 遍历坐标中元素,z(i)表示某个坐标的正切值,a(i)表示极坐标中点到原点的距离,也就是极径。
- 接下来判断该点在坐标系的哪一个区域中,不同趋于的点要进行不同的变换。
由于tan的值总取在-pi/2到pi/2之间,所以二三象限的角度需要用一四象限的角度表示
①第一象限(y(i)>=0&x(i)>=0
):将弧度转化为角度即可
②第二象限(y(i)>=0&x(i)<0
):将弧度转化为角度,再加180°转化到第四象限
③第三象限(y(i)<0&x(i)<=0
):将弧度转化为角度,再加180°转化到第一象限
④第四象限(y(i)<0&x(i)>0
):将弧度转化为角度即可 - 将每一个坐标极径与余弦(顺时针旋转pi/4角度后)得到旋转后的横坐标。
x2(i)=a(i)*cos(z_1(i)*pi/180-pi/4)
- 将每一个坐标极径与正弦(顺时针旋转pi/4角度后)得到旋转后的纵坐标。
y2(i)=a(i)*sin(z_1(i)*pi/180-pi/4)
综上就完成了坐标旋转的效果