凡亿专栏 | matlab画图——工科生的艺术
matlab画图——工科生的艺术

1 动图效果

用matlab绘画动态心跳图,效果如下

8d4bca1921b5d16235f077ee5c7ca3.jpg

程序


2 matlab程序

程序如下


%% 动态心跳画图clear; clc; close all; %% 两个函数名% --------------------------- functions -------------------------------f = @(x, y, z)(x.^2   2.25*y.^2   z.^2 - 1).^3 -  ...    x.^2.* z.^3 - 0.1125*y.^2.*z.^3;g = @(x, y, z)(sqrt(x.^2 y.^2)-2.5).^2   z.^2 - 0.4^2;
% -------------------------- generate data ----------------------------t = linspace(-5, 5);%% 三维画图[x1, y1, z1] = meshgrid(t);[x2, y2, z2] = meshgrid(t);%% 目标函数值val1 = f(x1, y1, z1);val2 = g(x2, y2, z2);
[p1, v1] = isosurface(x1, y1, z1, val1, 0);[p2, v2] = isosurface(x2, y2, z2, val2, 0);%% 画图% --------------------------- basic plot ------------------------------figure()subplot(1, 1, 1)
h = patch('faces',p1,'vertices',v1,'facevertexcdata',jet(size(v1,1)),...    'facecolor','w','edgecolor','flat'); hold on;patch('faces',p2,'vertices',v2,'facevertexcdata',jet(size(v2,1)),...    'facecolor','w','edgecolor','flat');grid on; axis equal; axis([-3,3,-3,3,-1.5,1.5]); view(3)% title(["$(x^2 \frac{9}{4}y^2 z^2-1)^3-x^2z^3-\frac{9}{80}y^2z^3=0$",...%     "$(\sqrt{x^2 y^2}-R)^2  z^2 = r^2$"],'Interpreter','latex','position',[3.3,4])%% 动态图名warning('off');% 动图标题T = suptitle("$I\ Love\ U\ $"); set(T,'Interpreter','latex','FontSize',24)%% 生成动态图% -------------------------- generate gif -----------------------------pic_num = 1;for i = 1:20    v1 = 0.98 * v1;    set(h, 'vertices', v1); drawnow;    F = getframe(gcf);    I = frame2im(F);    [I,map]=rgb2ind(I,256);    %% 保存动态图名    if pic_num == 1        imwrite(I,map,' Love.gif','gif','Loopcount',inf,'DelayTime',0.05);    else        imwrite(I,map,' Love.gif','gif','WriteMode','append','DelayTime',0.05);    end    pic_num = pic_num   1;end%% 连续画图,函数实时更新for i = 1:20    v1 = v1 / 0.98;    set(h, 'vertices', v1);     drawnow;    F = getframe(gcf);    I = frame2im(F);    [I,map] = rgb2ind(I,256);    imwrite(I,map,' Love.gif','gif','WriteMode','append','DelayTime',0.05);    pic_num = pic_num   1;end%% 跳动周期设置,10次t=10;% ----------------------------- dynamic -------------------------------while t    for i = 1:20        v1 = 0.98 * v1;        set(h, 'vertices', v1); drawnow;    end    for i = 1:20        v1 = v1 / 0.98;        set(h, 'vertices', v1); drawnow;    end    t=t-1;end% ------------------------------- end ---------------------------------
3 程序说明

程序可再创作,更改跳动周期可修改心跳动图跳动次数,实现跳次数动可控;当修改i的大小,即函数循环次数时,能过改变心跳大小,实现渐变。如下效果图

abe26a091a45bebf41a4f526153da5.jpg



声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表凡亿课堂立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。
相关阅读
进入分区查看更多精彩内容>
精彩评论

暂无评论