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