Matlab图线旋转
e=b(:,2); %b为TXT文档。n=b(:,3);t=b(:,1);z=20/180*pi;x=e*cos(z)+n*sin(z); y=-e*sin(z)+n*cos(z);
plot(x,y,'r')
输出的图线发生了变化。 展开
clear
clc
data=[0.0027 0.0161 0.0321 0.0509 0.0705 0.0848 0.0975 0.1090 0.1210 0.1311 0.1481...
0.1525 0.1548 0.1551 0.1587 0.1606 0.1608 0.1657 0.1675 0.1696 0.1716 0.1758...
0.1772 0.1792 0.1804 0.1831 0.1845 0.1845 0.1850 0.2085 0.2235 0.2403 0.2661...
0.3001 0.3295 0.3770 0.4232 0.4623 0.5000;...
0.0799 0.5594 1.1187 1.6781 2.5571 3.1164 3.6196 4.2379 4.7738 5.3509 6.4227...
20.4722 19.2561 21.8737 22.4508 7.5357 18.3492 17.5660 23.4814 16.7009 8.9784 15.4091...
9.6380 14.5362 10.4624 13.5541 11.5754 25.0066 12.6472 26.4906 27.2738 27.9540 28.9639...
30.1666 31.1644 32.3101 33.3219 34.1239 34.9201];
[data(2,:),I2]=sort(data(2,:));
data(1,:)=data(1,I2);
plot(data(1,:),data(2,:),'-k')
hold on
%下面才是旋转代码!!!
data=[1/0.5,0;0,1/35]*data;
theta=20/180*pi; %顺时针转20度
data=[cos(theta),sin(theta);-sin(theta),cos(theta)]*data;
%直接旋转
data=[0.5,0;0,35]*data;
plot(data(1,:),data(2,:),'-b')
% 旋转后恢复原有范围
data=[0.5/max(data(1,:)),0;0,35/max(data(2,:))]*data;
plot(data(1,:),data(2,:),'-r')
legend('原有数据','直接旋转','旋转后恢复原有范围')
data=[cos(theta),sin(theta);-sin(theta),cos(theta)]*data;
这句的意思是不是矩阵相乘。如果data=[x;y],那么上面的意思是:
x.*cos(theta)+y.*sin(theta)
-x.*sin(theta)+y.*cos(theta);
按照上面做后,图形发生了变化,请指教。
先把x,y归一化,再旋转,因为你看到的原图,虽然x和y的范围相差很大,但是两个轴的长度在视觉上是差不多的,真要是按值的范围画坐标轴的话,那原图就基本上是一个竖直的直线了,旋转完当然也几乎是一条直线了。所以要先归一化,旋转之后,你再回复它们的范围。另外,旋转矩阵[cos(theta),sin(theta);-sin(theta),cos(theta)]
是绕原点旋转。要是绕其它点旋转,先减去,旋转完后再加上。