1. 程式人生 > >Matlab學習筆記(二)--繪圖

Matlab學習筆記(二)--繪圖

9、動畫製作

  1. getframe函式可擷取一幅畫面資訊(稱為動畫中的一幀),一幅畫面資訊形成一個很大的列向量。顯然,儲存n幅圖面就需一個大矩陣。
  2. moviein(n)函式用來建立一個足夠大的n列矩陣。該矩陣用來儲存n幅畫面的資料,以備播放。之所以要事先建立一個大矩陣,是為了提高程式執行速度。
  3. movie(m,n)函式播放由矩陣m所定義的畫面n次,預設時播放一次。

 

set(f,'color','g');

fplot('sin(t)^2',[1 2]);

m=moviein(20);   %建立一個20列大矩陣

for i=1:20

view(-37.5+24*(i-1),30)    %改變視點

m(:,i)=getframe;   %將圖形儲存到m矩陣

end

movie(m);  

 

10、極座標圖

polar函式用來繪製極座標圖,其呼叫格式為:

polar(theta,rho,選項)

其中theta為極座標極角,rho為極座標矢徑,選項的內容與plot函式相似。

t=0:pi/50:2*pi;

r=sin(t).*cos(t);

polar(t,r,'-*');

 

11、figure函式

【例一】

f1 = figure('Name','Myfugure1','MenuBar','None','ToolBar','None','color',[0 1 0]);

說明:第一個引數為該視窗標題;第二個引數為選單欄設定;第三個引數為工具欄引數設定;第四個引數為視窗背景顏色設定.

【例二】

f2 = figure();

set(f2,'Name','Myfugure2','MenuBar','None','ToolBar','None');

set(f2,'color',get(f2,'color')+0.1);

說明:可以通過set函式修改視窗屬性,通過get函式獲取視窗屬性.

【例三】

f3 = figure() ;

PS.Name = 'Myfigure3';

PS.Color = [0 1 0];

rect = get(0,'screenSize');%獲取整個螢幕尺寸

N = 256;%作圖視窗尺寸

PS.position = [rect(3)/2-N/2,rect(4)/2-N/2,N,N];%使影象居中

set(f3,PS);

說明:可以通過結構體來設定視窗的屬性

【例四】

f1 = figure('Name','Myfugure1','MenuBar','None','ToolBar','None',...

    'color',[0 1 0],'Position',[440 234 400 300]);

h1 = uicontrol(f1,'Style','text','String','asdfasfsa',...

'Unit','normalize','Position',[100/440 100/234 200/400 100/300]);

說明: 'normalize'用來設定座標為相對座標, 'Position'中的區域的分母為參照座標(視窗座標),分子為該文字框相對於視窗的座標.

【例五】

x =0:pi/20:2*pi;

y = sin(x);

f1 = figure('Name','我的圖形視窗','MenuBar','None','ToolBar','None',...

'color',[0 1 0],'Position',[440 234 550 350],'KeyPressFcn','plot(x,y)');

說明:在繪圖視窗上響應了一個按下鍵盤的訊息.

【例六】

f1 = figure('Name','我的圖形視窗','MenuBar','None','ToolBar','None',...

    'color',[0 1 0],'Position',[440 234 550 350],'ResizeFcn','a3');

說明:當繪圖視窗尺寸改變時,便會執行a3.m檔案.

12、條形圖和麵積圖

13、方向和速度向量圖形

方向和速度向量圖形舉例

 

14、等高線的繪製

meshgrid可以產生網格矩陣,使用格式:

[X,Y] = meshgrid(x,y)

[X,Y] = meshgrid(x)

[X,Y,Z] = meshgrid(x,y,z)

使用示例:

[X,Y] = meshgrid(1:3,10:14).

15、視點控制和圖形的旋轉

為了使圖形的效果更逼真,有時需要從不同的角度觀看圖形,MATLAB 7語言提供了view、viewmtx和rotate3d等3個命令進行操作。使用者可以在命令視窗中呼叫這3個函式。其中,view函式主要是從不同的角度觀察圖形;viewmtx給出指定視角的正交轉換矩陣;而rotate3d函式可以讓使用者方便地用滑鼠來適時旋轉檢視

視點控制舉例

16、顏色的使用

MATLAB 7有一個叫顏色映像的資料結構來代表顏色值。顏色映像定義為一個有3列和若干行的矩陣。利用0到1之間的數,矩陣的每一行都代表了一種色彩。任一行的數字都指定了一個RGB值,即紅、黃、藍3種顏色的強度,形成一種特定的顏色。

17、顏色映像理解

 

18、顏色映像使用

句colormap(M)將矩陣M作為當前圖形視窗所用的顏色映像。例如,colormap(cool)裝入了一個有64個輸入項的cool顏色映像。colormap  default裝入了預設的顏色映像(hsv)。

函式plot、plot3、contour和contour3不使用顏色映像,它們使用列在plot顏色和線形表中的顏色。而大多數其他繪圖函式,比如mesh、surf、fill、pcolor和它們的各種變形函式,使用當前的顏色映像。

 

19、顏色映像顯示

20、顏色映像的建立和修改

顏色映像就是矩陣,意味著你可以象其他陣列那樣對它們進行操作。函式brighten就利用這一點通過調整一個給定的顏色映像來增加或減少暗色的強度。

使用者可以通過生成m×3的矩陣mamap來建立自己的顏色映像,並用colormap(mymap)來安裝它。顏色映像矩陣的每一個值都必須在0和1之間。如果企圖用大於或小於3列的矩陣或者包含著比0小比1大的任意值,函式colormap會提示一個錯誤然後退出。

 

21、光照控制

光照控制舉例

22、繪圖顏色填充

使用fill函式可以進行顏色填充.

使用格式:

fill(X,Y,’color’);

【例一】:三角形

x = [0 1 0];

y = [1 0 0];

fill(x,y,'r');

 

【例二】:填充圓形

t = 0:(2*pi/100):(2*pi) ;

x = sin(t) ;

y = cos(t) ;

fill(x,y,'b');

 

 

【例三】:填充四分之一圓

t = 0:(2*pi/100):(pi/2) ;%繪製四分之一圓

x = sin(t) ;

y = cos(t)+1 ;

a = [x 0];%加上圓心橫座標

b = [y 1];%加上圓心縱座標

fill(a,b,'b');

 

 

【例四】:填充不規則圖形

axis([-2 2 -2 2]);

hold on ;

x = 0:0.1:1 ;

y = 1- x ;

plot(x,y);

a = [0 1 0];

b = [1 0 0];

fill(a,b,'r');%用紅色填充

clear x ;

T = solve('x*x - 1 + x = 0');%解出y =x^2與y = 1-x的交點,此時交點值有兩個

x1 = 0:0.01:T(2) ;%T(2)為第一象限的交點

y1 = x1.^2;

a1 = [x1 1];

b1 = [y1 0];

plot(x1,y1,'w');

fill(a1,b1,'w');%用白色填充

 

【例五】:填充月牙形

clear all;

axis([-2,2,-2,2]);

hold on ;

%解曲線x^2+y^2=1與x^2+(y+1.5)^2=4的交點

[x2 y2] = solve('x^2+y^2 = 1,x^2+(y+1.5)^2=4');

%x2(1)表示第一個交點的橫座標

%x2(2)表示第二個交點的橫座標

x = x2(1):0.001:x2(2);

y = sqrt(1-x.^2);

y1 = sqrt(4-x.^2)-1.5;

a = [x x] ;

b = [y y1];

fill(a,b,'y');

 

部分三維圖形的繪製

【例一】

[x,y]=meshgrid(-8:0.5:8);%產生網格座標矩陣

z=sin(sqrt(x.^2+y.^2))./sqrt(x.^2+y.^2+eps);

subplot(2,2,1);

mesh(x,y,z);

title('mesh(x,y,z)');

subplot(2,2,2);

meshc(x,y,z);

title('meshc(x,y,z)');

subplot(2,2,3);

meshz(x,y,z);

title('meshz(x,y,z)');

subplot(2,2,4);

surf(x,y,z);

title('surf(x,y,z)');

【例二】:標準三維曲面

t=0:pi/20:2*pi;

[x,y,z]= cylinder(2+sin(t),30);

subplot(2,2,1);

surf(x,y,z);

subplot(2,2,2);

[x,y,z]=sphere;

surf(x,y,z);

subplot(2,1,2);

[x,y,z]=peaks(30);

surf(x,y,z);

【例三】:多峰函式的瀑布圖及等高線圖

subplot(1,2,1);

[X,Y,Z]=peaks(30);

waterfall(X,Y,Z)

xlabel('X-axis'),ylabel('Y-axis'),zlabel('Z-axis');

subplot(1,2,2);

contour3(X,Y,Z,12,'k');     %其中12代表高度的等級數

xlabel('X-axis'),ylabel('Y-axis'),zlabel('Z-axis');

24、視點處理

view可以進行視點處理,設定看圖形的角度.

一般使用格式:

view([x y z])

【例一】:變換角度

t=0:pi/20:2*pi;

[x,y,z]= cylinder(2+sin(t),30);

subplot(2,2,1);

surf(x,y,z);

for i=0:1:10

view([10*i,8*i+2,50]);

pause(1);

i = i+1 ;

end

【例二】:變換維數

t=0:pi/20:2*pi;

[x,y,z]= cylinder(2+sin(t),30);

subplot(1,2,1);

surf(x,y,z);

view(3);

subplot(1,2,2);

surf(x,y,z);

view(2);

25、自適應繪圖函式---fplot

fplot函式的呼叫格式為:  

fplot(fname,lims,tol,選項)

其中fname為函式名,以字串形式出現,lims為x,y的取值範圍,tol為相對允許誤差,其系統預設值為2e-3。選項定義與plot函式相同。

【例一】

fplot('sin(x)+cos(x)',[0 12])

 

 

【例二】

%%%%%%myfun.m%%%%%%

function Y = myfun(x)

Y(:,1) = 200*sin(x(:))./x(:);

Y(:,2) = x(:).^2;

%%%%%%%%%%%%%%%%%

fh = @myfun;%建立函式控制代碼

fplot(fh,[-20 20])