台湾国立大学郭彦甫Matlab教程笔记(13) 3D
3D plots
幾個(gè)重要指令,重要函數(shù)。
functions:
線圖
plot3: 3D line plot
幾個(gè)畫表面的圖
surf: 3D shaded surface plot
surfc: contour plot under a 3D shaded surface plot 輪廓畫圖
surface: create surface object
meshc:plot a contour graph under mesh graph
contour : contour plot of matrix
contourf: filled 2D contour plot
2D vs.3D
我們先跑一個(gè)二維的圖形,以上次筆記上最后一個(gè)例程為例
我們可以把二維的圖形轉(zhuǎn)換為三維用matlab提供的 三位旋轉(zhuǎn)按鈕
三維旋轉(zhuǎn)的效果:
原始2D跑出來的結(jié)果
附上代碼:
有了這個(gè)印象,我們逐步開始看關(guān)于3D的一些指令
plot3()三維畫線
畫線line
看一個(gè)例程:三維空間繪制三角函數(shù)sin()
關(guān)于代碼的解釋:
這里
意思是:y1這個(gè)y軸上在y=0這個(gè)面上顯示。
y3=1,表示這個(gè)圖在y=1這個(gè)面上顯示
y2=y3/2=0.5表示這個(gè)圖在y=0.5這個(gè)面上顯示
程序運(yùn)行結(jié)果截圖:
我們可以用plot3()函數(shù)畫更多的圖
more 3D Line Plots更多應(yīng)用
原理就是x,y,z是三個(gè)向量,(x0,y0,z0)三個(gè)點(diǎn)描出來,多少個(gè)點(diǎn)描出來多少。這樣就形成了空間中的line。
兩個(gè)例程
程序源代碼:
t=0:pi/50:10*pi; plot3(sin(t),cos(t),t);%x坐標(biāo)是sint,y坐標(biāo)是cost,這樣應(yīng)該是個(gè)圓, %然后縱坐標(biāo)z隨著時(shí)間上升,形成三維的螺旋線 grid on; axis square;跑出來的結(jié)果:
下面這個(gè)例子是三維的錐線
源程序代碼:
跑出來的結(jié)果:
上面講的都是line的圖形,就是一條線在三維空間中移動(dòng)。
常用的是三維的立體圖 surface圖形
principles for 3D surface plots貼圖
surface的原理:
和line的原理不同,surface 的原理是x,y,z都是一個(gè)矩陣,x和y會(huì)形成一個(gè)網(wǎng)格。
meshgrid這個(gè)指令 會(huì)創(chuàng)建出來關(guān)于x和y的矩陣
執(zhí)行的結(jié)果是如下的矩陣
X =-2 -1 0 1 2-2 -1 0 1 2-2 -1 0 1 2-2 -1 0 1 2-2 -1 0 1 2Y =-2 -2 -2 -2 -2-1 -1 -1 -1 -10 0 0 0 01 1 1 1 12 2 2 2 2有了x和y形成的網(wǎng)格,我們就可以畫圖
畫圖基本的函數(shù)是
surface plots:mesh() and surf()
mesh得到的是網(wǎng)格,網(wǎng)格是空洞的。
surf是格子上面有貼圖。
區(qū)別如下
下面通過例程查看mesh和surf怎么用
通過繪制這個(gè)函數(shù)
程序:
繪制結(jié)果:
這個(gè)函數(shù)我們?cè)诟叩葦?shù)學(xué)中經(jīng)常遇到,包括積分運(yùn)算等等,現(xiàn)在我們可以通過matlab直接繪制出來其圖像,簡(jiǎn)潔明了,極大地方便了我們的科研
我們?cè)賮砜聪乱粋€(gè)函數(shù)
contour()輪廓
功能:把3D圖中相同高度的值畫在同一個(gè)二維平面上投影。
看一個(gè)例程:
x=-3.5:0.2:3.5; y=-3.5:0.2:3.5; [X,Y]=meshgrid(x,y); Z=X.*exp(-X.^2-Y.^2); subplot(2,1,1); mesh(X,Y,Z);%畫出網(wǎng)格圖 axis square; subplot(2,1,2); contour(X,Y,Z);%等高線 axis square;例程運(yùn)行結(jié)果:
可以清楚看到contour投影的特點(diǎn):相同高度的投影在同一圈。
Contour也有自己的變化
Various Contour plots
想讓contour畫出來的線更密集
1.可以在contour中加數(shù)值,讓contour畫線更緊密。
contour(Z,[-.45:.05:.45]);
2.也可以在contour圖上標(biāo)出數(shù)值。用clabel這個(gè)指令
clabel(C,h);
3.可以涂顏色
用contourf()來做。
得到的效果圖:
例程:
作業(yè):
線的密度是0.05,涂上顏色,標(biāo)注數(shù)字在一張圖上。
我的練習(xí):
思路:首先我要自己先回顧出來這個(gè)的三維圖形過程:首先meshgrid產(chǎn)生x,y的網(wǎng)格
然后,寫出來函數(shù)表達(dá)式。之后就是contour直接繪制。
運(yùn)行這個(gè)版本,發(fā)現(xiàn)奇怪,明明設(shè)置了contour(Z,[-0.4:0.05:0.4]);,這個(gè)線的密度間隔應(yīng)該是0.05,但是發(fā)現(xiàn)是這樣的:間隔線密度并沒有變化
經(jīng)過修改,發(fā)現(xiàn),這里面不能存在幾個(gè)contour函數(shù),前面的contour函數(shù)被后面的contour函數(shù)執(zhí)行覆蓋了。
踩坑:這是一個(gè) 錯(cuò)誤的版本 ,出現(xiàn)的結(jié)果如上圖所示,線密度并沒有改變。
x=-2:0.2:2; y=-2:0.2:2; [X,Y]=meshgrid(x,y); Z=X.*exp(-X.^2-Y.^2); contour(Z,[-0.4:0.05:0.4]); axis square;%坐標(biāo)軸顯示 [C,h]=contour(Z); clabel(C,h);%標(biāo)注數(shù)字這個(gè)題的解決如下:
只需要一行代碼同時(shí)實(shí)現(xiàn)三個(gè)功能:[C,h]=contourf(Z,[-0.4:0.05:0.4]);clabel(C,h);%添加數(shù)字表示
改變線了密度,出現(xiàn)數(shù)字,顏色覆蓋。
最終代碼:正確的版本
x=-2:0.1:2; y=-2:0.1:2; [X,Y]=meshgrid(x,y); Z=X.*exp(-X.^2-Y.^2); [C,h]=contourf(Z,[-0.4:0.05:0.4]); axis square;%顯示坐標(biāo)軸 clabel(C,h);%添加數(shù)字表示運(yùn)行結(jié)果:
下面看函數(shù)
meshc() and surfc()
功能:
combination of surface/mesh and contours
把繪制表面和網(wǎng)格的函數(shù)與繪制等高線的函數(shù)結(jié)合
程式案例:
x=-3.5:0.2:3.5; y=-3.5:0.2:3.5; [X,Y]=meshgrid(x,y); Z=X.*exp(-X.^2-Y.^2); subplot(1,2,1); meshc(X,Y,Z); subplot(1,2,2); surfc(X,Y,Z);執(zhí)行過程:
再來角度的部分 View Angle :view()
用兩個(gè)角度來看物件的位置
這里兩個(gè)角度分別是:
Azimuth and Elevation
舉例子,下面繪制一個(gè)三維的立體球,然后用view函數(shù)來從不同的角度查看這個(gè)球
畫出來的結(jié)果是一個(gè)球
添加下面的代碼:
view(-45,20)
給出的又是另一個(gè)視角
現(xiàn)在看光線的部分 Light:light()
打光的時(shí)候位置會(huì)變化
L1=light(‘position’,[-1 -1 -1]);
我們可以設(shè)置打光的位置
set(L1,‘position’,[-1,-1,-1]);
我們也可以設(shè)置光的顏色:比如綠色
set(L1,‘color’,‘g’);
可以選擇位置
程序:
運(yùn)行結(jié)果:
再來
patch指令,用來畫立體多邊形
patch()
a graphical object containing polygons
學(xué)習(xí)到:vertex是頂點(diǎn)的意思(在‘facevertexCData’中)
例程:自己看一下怎么使用理解
執(zhí)行結(jié)果:
最后,看一下matlab畫圖非常專業(yè)
我把代碼又敲了一遍:
自己跑一遍的結(jié)果:
這個(gè)程序筆者還沒有研究哦。后續(xù)可能會(huì)研究研究吧。
【總結(jié)】
本文記錄的matlab3D畫圖的一些知識(shí):
functions:
線圖
plot3: 3D line plot
幾個(gè)畫表面的圖
surf: 3D shaded surface plot
surfc: contour plot under a 3D shaded surface plot 輪廓畫圖
surface: create surface object
meshc:plot a contour graph under mesh graph
contour : contour plot of matrix
contourf: filled 2D contour plot
看物件角度的函數(shù)
view()
繪制立體多邊形的函數(shù)
patch()
總結(jié)
以上是生活随笔為你收集整理的台湾国立大学郭彦甫Matlab教程笔记(13) 3D的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 台湾国立大学郭彦甫Matlab教程笔记(
- 下一篇: 台湾国立大学郭彦甫Matlab教程笔记(