MATLAB功能强悍早已不是秘密,可进行科学计算又能物理建模,可进行信号分析还能图形处理,可是,它还能用来画爱心追女孩!
上高数讲极坐标时,数学老师应该会讲关于心形线的一段美丽故事。据说笛卡尔当年身患疾病身体羸弱,竟然流落街头。一次偶然的机会,他正好碰上热爱数学的法国公主外出体察民生,解决了公主百思不得其解的数学问题。在短短的几句交谈中,笛卡尔向公主展示了他精湛的数学知识。事后他被邀请到宫廷当公主的数学课授业老师。日久情深,年幼的公主渐渐由对他的崇拜转为懵懂的爱慕。国王得知此事后勃然大怒,将笛卡尔赶出皇宫,并断绝公主和他的一切往来。公主在皇宫日思夜念,笛卡尔也向公主邮寄过多封书信,但均被国王扣留。在笛卡尔身患重疾在人间弥留之际,绝望的笛卡尔寄出了最后一封信,信上只写了简短的一个公式。国王及各位王公大臣看后脑中充满疑虑,但是他们觉得就几个简单的字母,让公主看下也无妨,也好让公主心情好些。公主看后拿笔在纸上画了一下,忽然泪如雨下。原来信上写的是这样一个式子:r=a*(1-sin(phi))
故事讲完了,虽然事实并非如此,笛卡尔也确实做过宫廷授业老师,但是笛卡尔和当时的那位公主年龄相差那么大,后人考证两人也没有过频繁接触,不过人们给心形线编造这样一个美丽的故事,也说明了心形线与人们的审美观如此切合,更让人惊叹的数学表达式的简洁完美。
好了,闲话休说,趁着无聊时LZ用MATLAB绘制了几颗心形线,并图形和代码附上,图形绘制得较粗糙,望多多指正!
(MATLAB很有用,要是楼下是大学生将要学MATLAB,不如趁这个机会学下MATLAB,直接运行程序可讨好小女友哦!这个LZ不会告诉她。好好学习,恋爱虽不是全部,但也希望各位童鞋在本科四年的生活中收获甜蜜的爱情。)

程序1:
%绘制心形线,包含所有轨迹
function heart1_1
theta=linspace(0,2*pi,150)';
phi=linspace(0,2*pi,60);
x0=cos(theta);
y0=sin(theta);
rx=2*cos(phi);
ry=2*sin(phi);
xx=ones(length(theta),1)*rx+cos(theta)*ones(1,length(phi));
yy=ones(length(theta),1)*ry+sin(theta)*ones(1,length(phi));
x1=rx+cos(2*phi+pi/2);
y1=ry+sin(2*phi+pi/2);
plot(x0,y0,'b','linewidth',2)
title('心形线')
for i=1:length(phi)
hold
on
plot(xx(:,i),yy(:,i),'y','linewidth',1)
hold
on
plot(x1(i),y1(i),'r*',[x1(i),rx(i)],[y1(i),ry(i)],'m--');
axis
equal
axis([-3.5,3.2,-3.2,3.2])
image=frame2im(getframe(gcf));
[imind,cm]=rgb2ind(image,256);
if
i==1
imwrite(imind,cm,'heart1.gif','GIF','Loopcount',inf);
else
imwrite(imind,cm,'heart1.gif','GIF','Writemode','append');
end
end
end

(追随的心)
上面的程序生成的GIF图片帧显示时间没控制好,或者是生成avi视频文件
%绘制心形线并生成avi视频,视频类容和heart1_1一样(注意在c盘用户文档的工作路径下运行)
function heart1_3avi
theta=linspace(0,2*pi,150)';
phi=linspace(0,2*pi,60);
x0=cos(theta);
y0=sin(theta);
rx=2*cos(phi);
ry=2*sin(phi);
xx=ones(length(theta),1)*rx+cos(theta)*ones(1,length(phi));
yy=ones(length(theta),1)*ry+sin(theta)*ones(1,length(phi));
x1=rx+cos(2*phi+pi/2);
y1=ry+sin(2*phi+pi/2);
plot(x0,y0,'b','linewidth',2)
title('追寻的心')
M=moviein(length(phi),gcf);
for i=1:length(phi)
hold
on
plot(xx(:,i),yy(:,i),'y','linewidth',1)
hold
on
plot(x1(i),y1(i),'rp',[x1(i),rx(i)],[y1(i),ry(i)],'g:','linewidth',0.5);
axis
equal
axis([-3.5,3.2,-3.2,3.2])
M(:,i)=getframe(gcf);
end
hh=figure('toolbar','none','menubar','none','NumberTitle','off');
%title('heart');
%set(gca,{'xtick','ytick','xticklabel','yticklabel'},{[],[],[],[]})
movie(hh,M,10)
heart=movie2avi(M,'TEwave.avi');
end
程序2
%绘制心形线生成示意图,并生成jif动态图
function heart1_2
theta=linspace(0,2*pi,150)';
phi=linspace(0,2*pi,60);
x0=cos(theta);
y0=sin(theta);
rx=2*cos(phi);
ry=2*sin(phi);
xx=ones(length(theta),1)*rx+cos(theta)*ones(1,length(phi));
yy=ones(length(theta),1)*ry+sin(theta)*ones(1,length(phi));
x1=rx+cos(2*phi+pi/2);
y1=ry+sin(2*phi+pi/2);
for i=1:length(phi)
plot(x0,y0,'b:','linewidth',2)
title('心型线')
hold
on
plot(xx(:,i),yy(:,i),'k:',x1(i),y1(i),'r.',[x1(i),rx(i)],[y1(i),ry(i)],'g--');
hold
on
plot(x1(1:i),y1(1:i),'m','linewidth',2);
axis
equal
axis([-3.5,3.2,-3.2,3.2])
image=frame2im(getframe(gcf));
clf;
[imind,cm]=rgb2ind(image,256);
if
i==1
imwrite(imind,cm,'heart2.gif','GIF','Loopcount',inf);
else
imwrite(imind,cm,'heart2.gif','GIF','Writemode','append','delaytime',0.1);
end
end
end

程序3
function heart3
[x,y]=meshgrid(-15:0.1:15);
z=100*ones(size(x))-3./sqrt(x.^2+y.^2)+3*sin(sqrt(x.^2+y.^2))+sqrt(200-x^2+y^2+10*sin(x)+10*sin(y))/1000;
h=mesh(x,y,z);
rotate(h,[40,80],-50)
axis off
set(gcf,'color','w')
view(-136.5,34)
title('玫瑰花')

程序4
%由心型线旋转生成,含内外两个
function heart4
t=linspace(0,2*pi,100);
theta=linspace(0,2*pi,45)';
r0=abs(16*(sin(t)).^3);
z0=13*cos(t)-5*cos(2*t)-2*cos(3*t)-cos(4*t);
z1=ones(size(theta))*z0;
x1=cos(theta)*r0;
y1=sin(theta)*r0;
x2=0.3*x1;
y2=0.3*y1;
z2=0.3*z1+ones(size(z1))*3.5;
plot3(x1,y1,z1,'b:','linewidth',1.2)
hold on
%mesh(x2,y2,z2)
%plot3(x2,y2,z2,'b')
surf(x2,y2,z2)
colormap([0.4,0.1,0.9])
grid off
axis([-17,17,-17,17,-17,19])
axis equal
view(-26.5,10)
title('双心')
end

程序5
=结构的心,由心形曲线放缩和平移而来
function heart2
theta=linspace(-pi,pi,100)';
z0=(1-sin(theta)).*sin(theta);
x0=(1-sin(theta)).*cos(theta);
t=[-1.9975:0.025:-1.895,linspace(-1.85,1.85,19),1.895:0.025:1.9975];
%生成x-y截面曲线,试了sin、tan、幂函数(3次幂与2次幂之和不错)等,椭圆函数最好
%a=0.8*(-abs(t0.^4)-t0.^2+2*ones(size(t0)));
a=sqrt((1-t.^2/4)*9);
z0=(z0+0.5*ones(size(theta)))*a;
x0=x0*a;
y0=ones(size(theta))*t;
mesh(x0,y0,z0)
%surf(x0,y0,z0)
%plot3(x0,y0,z0)
set(gcf,'color','w')
axis equal
grid off
%axis off
title('心形线')
view(-30,8)
colormap([1,0.1,0])
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删