Matlab 應用之繪制三維圖形(綜合篇)

   上帖子介紹了Matlab三維繪圖的基礎內容(見 http://www.yqgqt.org.cn/content/post/280288), 

并留下一個思考題,本文就通過對這個思考題的講解,將三維繪圖的命令融匯貫通。

  Step 1.數據分析

   在做任何Matlab圖形,或者說使用任何Matlab函數的時候,數據分析是最重要的步驟。因為:

   1. 通過數據分析指導數據結構,才能正確使用函數;

   2. 通過數據分析,可以對數據有一個感性的認識,這在很多問題上是至關重要的,也是經驗的體現;


   好了,我們先看看思考題的數據,如圖 1所示。

blob.png

圖 1.數據截圖

  分析:

        1. 數據由一個44行,3列的矩陣組成;

        2. 要求繪制的是圖像為,x坐標為第一列數據,y坐標為第二列數據,z坐標為第三列數據;

        3. 第一列數據總體是遞增的,應該說是一個階梯狀的數據;

        4. 在每個x軸階梯上,y軸的數據都是重復[5 10 15 20 25 30]的;

        6. 按照y軸數據重復了8個周期;

        7. y軸的前6個周期都是6組數據[5 10 15 20 25 30];

        8. y軸的后兩個周期都是4組數據 [5 10 15 20];

  

   以上就是我通過分析得到數據的8個特點,其實x軸數據和y軸數據,實現的就是格點矩陣,也就是meshgrid函數的功能,我們可以不用x軸與y軸的數據,只用z軸的數據,然后用meshgrid矩陣生成x,y軸的數據,這一點要深刻認識格點矩陣的本質,在本文的最后將討論格點矩陣的結構。

    Step 2.代碼講解


 

clc

clf

clear all; 

load('data.mat');                 %載入數據,在文檔中會一并給出,就是z軸的數據

x_0=500:500:3000;                 %生成x軸的格點分段一[500 1000 1500 2000 2500 3000]

y_0=5:5:30;                       %生成y軸的格點分段一[5 10 15 20 25 30] 

[xx_0,yy_0]=meshgrid(x_0,y_0);    %根據x,y軸格點分段一生成格點矩陣一

Z_0=reshape(Z(1:36),[6,6]);       %使得z軸數據的1到36行,組成6*6的矩陣形式,以便搭配格點矩陣一使用

surf(xx_0,yy_0,Z_0);              %做出曲面圖一

hold on                           %保持圖形

x_1=3000:250:3500;                %生成x軸的格點分段二[3000 3250 3500]

y_1=5:5:20;                       %生成y軸的格點分段二[5 10 15 20] 

[xx_1,yy_1]=meshgrid(x_1,y_1);    %根據x,y軸格點分段二生成格點矩陣二

Z_1_1=[Z(31:34);Z(37:end)];       %抽取出與格點矩陣搭配的Z軸數據

Z_1=reshape(Z_1_1,[4,3]);         %將抽取的Z軸數據組成4*3的形式,搭配格點矩陣二

surf(xx_1,yy_1,Z_1);              %做出曲面圖二


說明:

     1.為什么要分圖形一與二

回答: 見數據分析 7,8兩點;

     2.為什么第二個曲面的x 要從 3000開始,而不是 3250

回答:如果從3250開始,圖形將發生斷裂,從3000開始,可以實現曲面的“縫合”; 

 

     Step 3.繪制結果


blob.png

                                   圖 2.繪制后的結果


blob.png

圖 3.未縫合出現的斷面 


  用文中所示的代碼出的圖如圖2所示,如果不使用本文的圖像“縫合技術”,將出現圖3的斷面。

     

   Step 4.meshgrid 函數數據


運行代碼


x_0=500:500:3000;                 %生成x軸的格點分段一[500 1000 1500 2000 2500 3000]

y_0=5:5:30;                       %生成y軸的格點分段一[5 10 15 20 25 30] 

[xx_0,yy_0]=meshgrid(x_0,y_0);    %根據x,y軸格點分段一生成格點矩陣一


   我們來看看所生成的格點矩陣式什么款式的。


blob.png

圖 4.xx_0 數據結構

blob.png

圖 5.yy_0 數據結構


可以看到:

           1.xx_0與yy_0都是6*6的矩陣;

           2. xx_0的數據每行都是一樣的,由[500 1000 1500 2000 2500 3000] 構成;

           3. yy_0的數據每列都是一樣的,由[5 10 15 20 25 30]構成;  

運行

     

Z_0=reshape(Z(1:36),[6,6]);       %使得z軸數據的1到36行,組成6*6的矩陣形式,以便搭配格點矩陣一使用

 我們看看與之搭配的Z_0是什么樣子的



blob.png

圖 6 Z_0數據結構


可以看到,Z_0 也應該是一個6*6的矩陣,每一列,對應每一個y軸周期


本案例相關代碼及數據見 http://www.yqgqt.org.cn/content/doc/4ff96c69-23fc-4bff-9a0d-9de3a97d763c


登錄后免費查看全文
立即登錄
App下載
技術鄰APP
工程師必備
  • 項目客服
  • 培訓客服
  • 平臺客服

TOP

5
48
4