回覆列表
  • 1 # 使用者923262990785

    三維曲線

    plot3函式與plot函式用法十分相似,其呼叫格式為:plot3(x1,y1,z1,選項1,x2,y2,z2,選項2,…,xn,yn,zn,選項n)其中每一組x,y,z組成一組曲線的座標引數,選項的定義和plot函式相同。當x,y,z是同維向量時,則x,y,z 對應元素構成一條三維曲線。當x,y,z是同維矩陣時,則以x,y,z對應列元素繪製三維曲線,曲線條數等於矩陣列數。 例 繪製三維曲線。程式如下:

    t=0:pi/100:20*pi;x=sin(t);y=cos(t);z=t.*sin(t).*cos(t);plot3(x,y,z);title("Line in 3-D Space");xlabel("X");ylabel("Y");zlabel("Z");

    三維曲面

    1.產生三維資料在MATLAB中,利用meshgrid函式產生平面區域內的網格座標矩陣。其格式為:x=a:d1:b; y=c:d2:d;[X,Y]=meshgrid(x,y);語句執行後,矩陣X的每一行都是向量x,行數等於向量y的元素的個數,矩陣Y的每一列都是向量y,列數等於向量x的元素的個數。

    2.繪製三維曲面的函式surf函式和mesh函式的呼叫格式為:mesh(x,y,z,c):畫網格曲面,將資料點在空間中描出,並連成網格。 surf(x,y,z,c):畫完整曲面,將資料點所表示曲面畫出。一般情況下,x,y,z是維數相同的矩陣。x,y是網格座標矩陣,z是網格點上的高度矩陣,c用於指定在不同高度下的顏色範圍。 例 繪製三維曲面圖z=sin(x+sin(y))-x/10。程式如下: [x,y]=meshgrid(0:0.25:4*pi); %在[0,4pi]×[0,4pi]區域生成網格座標 z=sin(x+sin(y))-x/10; mesh(x,y,z); axis([0 4*pi 0 4*pi -2.5 1]);此外,還有帶等高線的三維網格曲面函式meshc和帶底座的三維網格曲面函式meshz。其用法與mesh類似,不同的是meshc還在xy平面上繪製曲面在z軸方向的等高線,meshz還在xy平面上繪製曲面的底座。 例 在xy平面內選擇區域[-8,8]×[-8,8],繪製4種三維曲面圖。程式如下:[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)")

    3.標準三維曲面sphere函式的呼叫格式為:(球體,領域,半球,圈子)[x,y,z]=sphere(n):generates three(N+1)-by-(N+1) matrices so that SURF(X,Y,Z) produces a unit sphere.cylinder函式的呼叫格式為:(圓筒,圓柱體,柱面)[x,y,z]= cylinder(R,n),其中r為圓周半徑,n為組成圓周的點數。MATLAB還有一個peaks 函式,稱為多峰函式,常用於三維曲面的演示。 例 繪製標準三維曲面圖形。程式如下: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);

    其他三維圖形

    在介紹二維圖形時,曾提到條形圖、杆圖、餅圖和填充圖等特殊圖形,它們還可以以三維形式出現,使用的函式分別是bar3、stem3、pie3 和fill3。bar3函式繪製三維條形圖,常用格式為:bar3(y)bar3(x,y)stem3函式繪製離散序列資料的三維杆圖,常用格式為:stem3(z)stem3(x,y,z)pie3函式繪製三維餅圖,常用格式為:pie3(x)fill3函式等效於三維函式fill,可在三維空間內繪製出填充過的多邊形,常用格式為:fill3(x,y,z,c) 例 繪製三維圖形:(1) 繪製魔方陣的三維條形圖。(2) 以三維杆圖形式繪製曲線y=2sin(x)。(3) 已知x=[2347,1827,2043,3025],繪製餅圖。(4) 用隨機的頂點座標值畫出五個黃色三角形。程式如下:subplot(2,2,1);bar3(magic(4))subplot(2,2,2);y=2*sin(0:pi/10:2*pi);stem3(y);subplot(2,2,3);pie3([2347,1827,2043,3025]);subplot(2,2,4);fill3(rand(3,5),rand(3,5),rand(3,5), "y" )

    例 繪製多峰函式的瀑布圖和等高線圖。程式如下: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");

    圖形修飾處理

    視點處理MATLAB提供了設定視點的函式view,其呼叫格式為:view(az,el)其中az為方位角,el為仰角,它們均以度為單位。系統預設的視點定義為方位角-37.5°,仰角30°。例 從不同視點繪製多峰函式曲面。 程式如下: subplot(2,2,1);mesh(peaks); view(-37.5,30); %指定子圖1的視點 title("azimuth=-37.5,elevation=30") subplot(2,2,2);mesh(peaks); view(0,90); %指定子圖2的視點 title("azimuth=0,elevation=90") subplot(2,2,3);mesh(peaks); view(90,0); %指定子圖3的視點 title("azimuth=90,elevation=0") subplot(2,2,4);mesh(peaks); view(-7,-10); %指定子圖4的視點 title("azimuth=-7,elevation=-10")

    色彩處理

    1.顏色的向量表示MATLAB除用字元表示顏色外,還可以用含有3個元素的向量表示顏色。向量元素在[0,1]範圍取值,3個元素分別表示紅、綠、藍3種顏色的相對亮度,稱為RGB三元組。2.色圖色圖(Color map)是MATLAB系統引入的概念。在MATLAB中,每個圖形視窗只能有一個色圖。色圖是m×3 的數值矩陣,它的每一行是RGB三元組。色圖矩陣可以人為地生成,也可以呼叫MATLAB提供的函式來定義色圖矩陣。3.三維表面圖形的著色三維表面圖實際上就是在網格圖的每一個網格片上塗上顏色。surf函式用預設的著色方式對網格片著色。除此之外,還可以用shading命令來改變著色方式。shadingfaceted命令將每個網格片用其高度對應的顏色進行著色,但網格線仍保留著,其shading flat命令將每個網格片用同一個顏色進行著色,且網格線也用相應的顏色,從而使得圖形表面顯得更加光滑。shading interp命令在網格片內採用顏色插值處理,得出的表面圖顯得最光滑。顏色是黑色。這是系統的預設著色方式

    例 3種圖形著色方式的效果展示。程式如下:[x,y,z]=sphere(20);colormap(copper);subplot(1,3,1);surf(x,y,z);axis equalsubplot(1,3,2);surf(x,y,z);shading flat;axis equalsubplot(1,3,3);surf(x,y,z);shading interp;axis equal 光照處理MATLAB提供了燈光設定的函式,其呼叫格式為:light("Color",選項1,"Style",選項2,"Position",選項3)

    光照處理後的球面。程式如下:[x,y,z]=sphere(20);subplot(1,2,1);surf(x,y,z);axis equal;light("Posi",[0,1,1]);shading interp;hold on;plot3(0,1,1,"p");text(0,1,1," light");subplot(1,2,2);surf(x,y,z);axis equal;light("Posi",[1,0,1]);shading interp;hold on;plot3(1,0,1,"p");text(1,0,1," light"); 圖形的裁剪處理例4-22 繪製三維曲面圖,並進行插值著色處理,裁掉圖中x和y都小於0部分。程式如下:[x,y]=meshgrid(-5:0.1:5);z=cos(x).*cos(y).*exp(-sqrt(x.^2+y.^2)/4);surf(x,y,z);shading interp;pause %程式暫停i=find(x<=0&y<=0);z1=z;z1(i)=NaN;surf(x,y,z1);shading interp;為了展示裁剪效果,第一個曲面繪製完成後暫停,然後顯示裁剪後的曲面。

    影象處理與動畫製作

    影象處理1.imread和imwrite函式imread和imwrite函式分別用於將影象檔案讀入MATLAB工作空間,以及將影象資料和色圖資料一起寫入一定格式的影象檔案。MATLAB支援多種影象檔案格式,如.bmp、.jpg、.jpeg、.tif等。2.image和imagesc函式這兩個函式用於影象顯示。為了保證影象的顯示效果,一般還應使用colormap函式設定影象色圖。例5-23 有一影象檔案flower.jpg,在圖形視窗顯示該影象。程式如下:[x,cmap]=imread("flower.jpg"); %讀取影象的資料陣和色圖陣image(x);colormap(cmap);axis image off %保持寬高比並取消座標軸

    動畫製作

    MATLAB提供getframe、moviein和movie函式進行動畫製作。1.getframe函式getframe函式可擷取一幅畫面資訊(稱為動畫中的一幀),一幅畫面資訊形成一個很大的列向量。顯然,儲存n幅圖面就需一個大矩陣。

    2.moviein函式moviein(n)函式用來建立一個足夠大的n列矩陣。該矩陣用來儲存n幅畫面的資料,以備播放。之所以要事先建立一個大矩陣,是為了提高程式執行速度。3.movie函式movie(m,n)函式播放由矩陣m所定義的畫面n次,預設時播放一次。例 繪製了peaks函式曲面並且將它繞z軸旋轉。程式如下[X,Y,Z]=peaks(30);surf(X,Y,Z)axis([-3,3,-3,3,-10,10])axis off;shading interp;colormap(hot);m=moviein(20); %建立一個20列大矩陣for i=1:20view(-37.5+24*(i-1),30) %改變視點m(:,i)=getframe; %將圖形儲存到m矩陣endmovie(m,2); %播放畫面2次

    MATLAB三維網圖的高階處理

    4.1. 消隱處理

     例.比較網圖消隱前後的圖形

    z=peaks(50);

    Subplot(2,1,1);

    mesh(z);

    title("消隱前的圖")

    hidden off

    subplot(2,1,2);

    mesh(z);

    title("消隱後的圖")

    hidden on

    colormap([0 0 1])

    4.2. 裁剪處理

      利用不定數NaN的特點,可以對網圖進行裁剪處理

      例.圖形裁剪處理

    P=peaks(30);

    subplot(2,1,1);

    mesh(P);

    title("裁剪前的圖");

    subplot(2,1,2);

    P(20:23,9:15)=NaN*ones(4,7); %裁剪

    meshz(P); %垂簾網線圖

    title("裁剪後的圖")

    colormap([0 0 1]) %藍色網線

    注意裁剪時矩陣的對應關係,即大小一定要相同

    4.3. 三維旋轉體的繪製

      為了一些專業使用者可以更方便地繪製出三維旋轉體,MATLAB專門提供了2個函式:柱面函式cylinder和球面函式sphere

    柱面圖繪製由函式cylinder實現.

      [X,Y,Z]=cylinder(R,N) 此函式以母線向量R生成單位柱面.母線向量R是在單位高度裡等分刻度上定義的半徑向量.N為旋轉圓周上的分格線的條數.可以用surf(X,Y,Z)來表示此柱面.

      [X,Y,Z]=cylinder(R)或[X,Y,Z]=cylinder此形式為預設N=20且R=[1 1]

    例.柱面函式演示舉例

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

    r=5+cos(x);

    [a,b,c]=cylinder(r,30);

    mesh(a,b,c)

     例.旋轉柱面圖.

    t=0:pi/12:3*pi;

    r=abs(exp(-0.25*t).*sin(t));

    r=abs(exp(-0.25*t).*sin(t));

    [X,Y,Z]=cylinder(r,30);

    mesh(X,Y,Z)

    colormap([1 0 0])

    (2).球面圖

      球面圖繪製由函式sphere來實現

    [X,Y,Z]=sphere(N)%此函式生成3個(N+1)*(N+1)的矩陣

    surf(X,Y,Z) %產生單位球面

    [X,Y,Z]=sphere %此型式使用了預設值N=20.

    Sphere(N) %只是繪製了球面圖而不返回任何值

    例.繪製地球表面的氣溫分佈示意圖.

    [a,b,c]=sphere(40);

    t=abs(c);

    surf(a,b,c,t);

    axis("equal") %此兩句控制座標軸的大小相同

    axis("square")

    colormap("hot")

  • 中秋節和大豐收的關聯?
  • 冬天去哪旅行比較好短期的?