许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  怎么用MATLAB绘制炫酷图形?MATLAB也可以用来追女孩(趣味编程)

怎么用MATLAB绘制炫酷图形?MATLAB也可以用来追女孩(趣味编程)

阅读数 7
点赞 0
article_banner

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

a4c26d1e5885305701be709a3d33442f.png

(追随的心)

上面的程序生成的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

a4c26d1e5885305701be709a3d33442f.png

程序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('玫瑰花')

a4c26d1e5885305701be709a3d33442f.png

程序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

a4c26d1e5885305701be709a3d33442f.png

程序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])


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

相关文章
技术文档
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空