您的位置:首页 > 编程语言 > MATLAB

Matlab绘制跳动的心

2016-03-05 01:02 423 查看
相信不少程序猿在情人节,被女票要求用程序语言编写表白程序。我参考网上的资料,用matlab编写了心跳的动画。

下图是网上流传的心形数学表达式:



我觉得最后一个表达式跟传统的心形是最像的,这个表达式是用极坐标表示的,编写和控制极为方便。第二个心形表达式也比较像,但是这个表达式使用了隐函数,编写并控制起来不容易。

由于最后一个心形图案的中心点在十字交叉部分,要让心形图案跳动起来,只需要控制心形图案随时间变化而改变大小。为了打造生动的跳动动作,我用分段三角函数来模拟跳动幅度,当然也可以直接提供你自己心跳的曲线函数。

Matlab中提供movie函数用于制作动画,以及cla函数用于擦除所有当前绘制的图案。为了效率可以只擦除必要的部分。

gcp=figure;
M=moviein(100,gcp);
heartSpeed=15;
radiusRate=3;

for i = 1:100

axis([-20 20 -20 20]);
cla(gcp);
x=[];
y=[];

for t = 0:0.01:2*pi
r=(sin(t)*sqrt(abs(cos(t))))/(sin(t)+7/5)-2*sin(t)+2;
r = radiusRate * r;
x=[x,r*cos(t)*(0.5+0.5*HeartRate(i,heartSpeed))];
y=[y,r*sin(t)*(0.5+0.5*HeartRate(i,heartSpeed))];
end
hold on;
fill(x,y,'r');

M(:,i)=getframe;
end
movie(M,1);
function ratio=HeartRate(i,heartSpeed)
i=mod(i,heartSpeed);
if i < heartSpeed / 2
ratio=sin( i/heartSpeed*pi);
elseif i >= heartSpeed / 2 && i < heartSpeed * 3/4
ratio=2*cos(i/heartSpeed*2/3*pi);
else
ratio = 0;
end


在很多计算机图形学领域里面,sin函数经常被用来模拟现实中的振动和波动,比如nehe的opengl教程里面,可以用sin函数模拟人走路时身体的上下摆动。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  matlab