matlab连线变成面,Matlab图线旋转如图所示,图线是由一系列数据点连线而成,现在需要将图线开始的直线变成水平的,也就是旋转到开始点与横轴...

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('原有数据','直接旋转','旋转后恢复原有范围')

565c4060b7fb94dfb473ffc800ed3270.jpg

再问: 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)] 是绕原点旋转。要是绕其它点旋转,先减去,旋转完后再加上。

再问: 如何归一化呢?旋转完后如何恢复他们的范围?谢谢!

再答: 数据分别除以最大值后,乘以旋转矩阵,之后再分别除以 当前 最大值,再乘上 原来 的最大值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值