matlab实例——动态心形函数及其涉及的知识点

特别感谢

B站作者@基山督的 视频及源代码

心形函数1

clc                 %clc:清除命令窗口的内容,对工作环境中的全部变量无任何影响
clear all;          %clear all:清除工作空间的所有变量,函数,和MEX文件
close all;          %close all:关闭所有的Figure窗口

hn=figure('name','春心荡漾','MenuBar','None');  %产生一个窗口,名字是春心荡漾,并且没有菜单栏
set(hn,'color','w');                            %将背景设为白色

for n=1:100          %循环100次
    cla                    %即清除当前图形中的当前活动轴。其他轴不受影响。

    t=num2str(n);%把n转化为字符串

    Lf1='(-x)^(2/3)+(0.9*(3.3-(-x)^2)^0.5)*sin(';

    Lf2='*pi*(-x))';

    Left=[Lf1,t,Lf2];           %左侧的函数

    ezplot(Left);               %一维绘图函数
    hold on             	    %在作用下一幅图像时保留已有图像
    Rf1='x^(2/3)+(0.9*(3.3-x^2)^0.5)*sin(';
    Rf2='*pi*x)';
    Right=[Rf1,t,Rf2];          %这样分开处理目的是通过t的变化产生动画效果
%左右两侧函数是一样的,只是将变量对称
    ezplot(Right);               %右侧的函数
    hold on
    axis([-2 2 -1.5 2.5]);       %座标轴范围
    axis off                     %取消对座标轴的一切设置
    drawnow;                     %刷新一下  产生动画效果 
    title('春心荡漾')

end

在这里插入图片描述

心形函数2

clc
clear all;
close all;
x1=-3:0.01:0;
x2=0:0.01:3;%确定自变量的范围
hn=figure('name','春心荡漾','MenuBar','None');
set(hn,'color','w');
for t=1:50
   cla
   eval('yleft=(-x1).^(2/3)+(0.9*(3.3-(-x1).^2).^0.5).*sin(t*pi*(-x1));');
    %yleft=(-x1).^(2/3)+(0.9*(3.3-(-x1).^2).^0.5).*sin(t*pi*(-x1));
    %或者直接计算函数
   eval('yright=x2.^(2/3)+(0.9*(3.3-x2.^2).^0.5).*sin(t*pi*x2);');
   %eval函数可以直接把字符串当作命令执行,直接算出左边函数和右边函数的值
    plot(x1,yleft,'*r',x2,yright,'*r'); %*r是控制颜色(详见颜色对照表),的组成心的符号(+-*\:axis([-1.8 1.8 -1.5 2.5]);
    axis off;  %去除座标
    pause(0.1); %用暂停形成动画效果
    title('跳动的心'); %刷新
end
clc;

在这里插入图片描述

知识点

figure(…)函数的一些用法

第一种用法最简单

它创建一个窗口,其各种属性都是使用默认设置。例如它创建的窗口立即成为当前窗口,并显示在其它窗口之上。直到新的窗口被创建或者其它窗口被唤醒(called)。

第二种用法

figure(‘PropertyName’,propertyvalue,…),则可以指定某些属性。
例如:

  1. “Name”属性,则可以指定该窗口的标题。 “Position”属性则指定窗口的大小和位置:
  2. figure(‘Position’,[600, 300, 300, 200]);
    其中属性值为一个四元数组 rect = [left,bottom, width, height],第一、二个参数表示窗口位置,都是从屏幕的左下角计算的。
  3. 'MenuBar’指菜单栏:none则代表没有菜单栏。

第三种用法

figure(h),则根据参数 h 的不同而表现不同。
如果 h 是先前一个窗口的句柄(handle),则figure(h)相当于唤醒了该窗口,使得该窗口为当前窗口;
如果 h 并不是某个窗口的句柄,但它是一个整数,则 figure(h)
创建一个句柄为 h 的新窗口。

最后一种用法

h= figure(…),相当于前面三种用法中在创建一个窗口的同时,返回该窗口的句柄。

注释:句柄:句柄是matlab语言独有的参数,相当于C语言的指针。
句柄分为多种,如函数柄,对象柄,图形柄等。
图形句柄就指一个图形,在生成图形时同时得到一代号,如语句 h=plot(x,y),h 就是一个图形句柄,在后来的某一个地方就可用h代表这个图,如 set(h,…),对这个图形进行再设置。

set函数

  1. set(Swarmscope,‘EraseMode’,‘xor’,‘MarkerSize’,12)
    Swarmscope为句柄名,'EraseMode’为句柄图像的擦拭方式,为xor,逻辑符号——或者,MarkerSize为句柄尺寸,大小为12

  2. set(hn,‘color’,‘w’)
    将背景色设为白色

num2str(n)解释

将n由数字转化为字符型
还有其他的见

https://blog.csdn.net/jianxi602/article/details/35569095@流程序中的运动者

ezplot一维绘图函数

https://blog.csdn.net/mytzs123/article/details/78656072@mytzs123

isosurface等值曲面函数

座标轴的控制函数axis,调用格式如下:

axis([xmin,xmax,ymin,ymax,zmin,zmax])
用此命令可以控制座标轴的范围.
与axis相关的几条常用命令还有:
axis auto 自动模式,使得图形的座标范围满足图中一切图元素
axis equal 严格控制各座标的分度使其相等
axis square 使绘图区为正方形
axis on 恢复对座标轴的一切设置
axis off 取消对座标轴的一切设置
axis manual 以当前的座标限制图形的绘制

drawnow用于刷新屏幕。

将还未处理完的图像实时的显示出来,可以理解为立即执行的plot,变化的plot。
当代码执行时间长,需要反复执行plot时,Matlab程序不会马上把图像画到figure上,这时,要想实时看到图像的每一步变化情况,需要使用这个语句。

eval函数可以直接将字符串当作命令执行

plot中颜色对照表

在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章