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中顏色對照表

在這裏插入圖片描述

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