Matlab 應用之繪制三維圖形(綜合篇)
上帖子介紹了Matlab三維繪圖的基礎內容(見 http://www.yqgqt.org.cn/content/post/280288),
并留下一個思考題,本文就通過對這個思考題的講解,將三維繪圖的命令融匯貫通。
Step 1.數據分析
在做任何Matlab圖形,或者說使用任何Matlab函數的時候,數據分析是最重要的步驟。因為:
1. 通過數據分析指導數據結構,才能正確使用函數;
2. 通過數據分析,可以對數據有一個感性的認識,這在很多問題上是至關重要的,也是經驗的體現;
好了,我們先看看思考題的數據,如圖 1所示。

圖 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.繪制結果

圖 2.繪制后的結果

圖 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軸格點分段一生成格點矩陣一
我們來看看所生成的格點矩陣式什么款式的。

圖 4.xx_0 數據結構

圖 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是什么樣子的

圖 6 Z_0數據結構
可以看到,Z_0 也應該是一個6*6的矩陣,每一列,對應每一個y軸周期
本案例相關代碼及數據見 http://www.yqgqt.org.cn/content/doc/4ff96c69-23fc-4bff-9a0d-9de3a97d763c
工程師必備
- 項目客服
- 培訓客服
- 平臺客服
TOP




















