%在MATLAB中运行
%{
这篇的代码是我根据网上的资料整理编写的,实现生成一个旋转的心形并配以文字的功能,科研男可以用它来向心仪的女神表白用。
谁说理工科男生不懂浪漫!
当然,女神最好是理工科出身的,文科女一来不懂MATLAB是何物,二来不会明白调试代码的辛苦,所以文科女是很难领会到其中的感情的。
本代码是我写给女朋友的,发布前未作修改,只是增加了注释。具体怎么修改,懂MATLAB的同志们基本一看就明白的,我就不说太多了。
想交流的话:
本人人人页面:http://www.renren.com/232502474 加好友需要验证,不过可以留言;
QQ:439246372
%}
clear all;
close all;
clc;
%配置函数,建立图形
%f=@(x,y,z)(x.^2+y.^2+z.^2-1);%这是个球体的方程,测试时候用的,现在注释掉了
f=@(x,y,z)(x.^2+ (9./4).*y.^2 + z.^2 - 1).^3 - x.^2.*z.^3.*2 - (9./80).*y.^2.*z.^3;%这个是心形的方程
[x,y,z]=meshgrid(-2:0.04:2); %设置网格密度,中间的数字越小,格越密,形状越逼真,但是太密可能导致内存不足而无法运行.我2GB内存,最高设置到0.03.
val=f(x,y,z);
[p,v]=isosurface(x,y,z,val,0);
%配置显示环境
figure('Color',[0 0 0],'Position',[200,100,800,500]);
axes('Color',[0 0 0],'XColor',[1 1 1],'YColor',[1 1 1],'ZColor',[1 1 1],'FontSize',1,'Visible','off');
patch('faces',p,'vertices',v,'facevertexcdata',jet(size(v,1)),'facecolor','none','edgecolor','interp');
% 'color' 后面可以是 'r','g','b','c','m','y','w', or 'k',对应不同的颜色,或者[x,y,z],x,y,z是MATLAB中对颜色的表述,具体自行查资料吧
%'facecolor''edgecolor' 可以是 'flat' 'none', or 'interp',亦或者上一条注释
view(3);grid off;axis equal;
%配置显示文本
da=[126 23578 26976 25105 29233 20320 126];%标题内容,每个字符都用数值表示,不运行看不出来什么内容,执行 double('字符串') 可以看到“字符串”对应的数值
db=[32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 126 108 117 118 32 102 114 111 109 32 36213 24344 27915];%落款内容,原理同上
msg1=text(0,0.3,2,char(da),'Color','r','FontSize',20,'HorizontalAlignment','center');%显示标题
text(0,0,-1.5,char(db),'Color','r','FontSize',10,'HorizontalAlignment','left');%显示落款
text(0,0.3,1.75,'\heartsuit \^\_\^ \heartsuit','Color','r','FontSize',20,'HorizontalAlignment','center');
%'\heartsuit\heartsuit'
h=gca;
axis vis3d
%配置文字闪烁效果/标题交替显示
sl=10;%减速倍数,控制文字闪烁速度
mn=4;%文字闪烁更替出现的颜色数,对应下面的if/elseif次数
%配置滚动字幕
msg2=text(0,0,-1.1,'','Color','y','FontSize',10,'HorizontalAlignment','right');%配置小字号显示属性和位置
msg3=text(0,0,-1.3,'','Color','y','FontSize',14,'HorizontalAlignment','right');%配置大字号显示属性和位置
txtmsg=char([
20146 29233 30340 126 32 32 32 32 32 32 32 32 32 32
23453 36125 126 32 32 32 32 32 32 32 32 32 32 32
25105 29233 20320 126 126 32 32 32 32 32 32 32 32 32
22909 29233 22909 29233 126 126 126 32 32 32 32 32 32 32
20040 20040 32 126 32 92 94 32 51 32 92 94 32 126
]);%滚动字幕默认内容,注意,每行字符数必须相同,字数不够的末尾补空格,即32
%txtmsg=char(importdata('msg.txt'));%从外部文件msg.txt加载文本部分,msg.txt要和代码在同一目录下。无msg.txt可注释掉本行,不影响程序执行。
%一行文字如果太多,图形窗口显示不下,则文字可能显示不出来,所以一行不要写太多。
[msgLength,~]=size(txtmsg);
msgls=100;%减速倍数,控制滚动字幕速度
for i=0:inf
%文字闪烁
j=mod(fix(i/sl),mn);
if j==0
set(msg1,'Color','r');
elseif j==1
set(msg1,'Color','g');
elseif j==2
set(msg1,'Color','y');
elseif j==3
set(msg1,'Color','r');
end
%滚动字幕
msgl=mod(fix(i/msgls),msgLength+2);
if msgl>msgLength;
set(msg2,'String','');
elseif msgl~=0;
set(msg2,'String',txtmsg(msgl,:));
end
if msgl<msgLength
set(msg3,'String',txtmsg(msgl+1,:));
else
set(msg3,'String','');
end
%自动旋转效果
view(h,i,10);
drawnow;
end
- 1
- 2
- 3
- 4
- 5
前往页