引子
matlab 作為科學計算神器,可以輕松的實現矩陣的計算和三維圖形的繪制,
因此今天用matlab繪制了一道高數題中的圖形。
題目如下:
其中 x+y = pi/2 已經證明是錯題,應該是 x + z = pi/2。
分析
因此:
想要實現所圍封閉區域的繪制,就是要實現:
1) y^2 = x
2) z = 0
3) y = 0
4) x = pi / 2 - z
以上四個平面的繪制。
編程
matlab編程 程序如下:
1 [x z] = meshgrid([0:0.1:pi]) 2 y = sqrt(x) 3 mesh(x,y,z,'FaceColor','r','EdgeColor','none') % 繪制曲面 y^2=x 4 x = pi/2 - z 5 hold on 6 mesh(x,y,z,'FaceColor','g','EdgeColor','none') % 繪制曲面 x+z=pi/2 7 xlabel('x');ylabel('y');zlabel('z');alpha(0.5) 8 z = ones(size(x))-1 9 mesh(x,y,z,'FaceColor','b','EdgeColor','none') % 繪制曲面 z=0 10 [x z] = meshgrid([0:0.1:pi]) 11 y = ones(size(x))-1 12 mesh(x,y,z,'FaceColor','y','EdgeColor','none') % 繪制曲面 y=0 13 alpha(0.5)
最終效果圖
程序分析
核心程序分析:
1) meshgrid() 用於網格數,line 1 處用於生成 x 和 z 的范圍。[0:0.1:pi] 代表生成x的定義域為(0,pi),每隔0.1作為一個分隔。
2) line 2 的函數 mesh(x,y,z,'FaceColor','r','EdgeColor','none') 表示生成曲面,x,y,z是未知量,FaceColor是面顏色,EdgeColor是邊框顏色。
3) line 5 的 hold on , 表示 繪制的圖形保持,不擦除,否則會擦除前面的圖形。
4) line 8 的 z = ones(size(x))-1 代表 生成一個全是0的矩陣(單向量陣)。因為需要生成 z = 0 ; 而直接取0,會報錯。錯誤示范如下:
>> [a b] = meshgrid([0:0.1:pi]) >> c = 0 >> mesh(a,b,c) Error using mesh (line 76) Z must be a matrix, not a scalar or vector 此處說明 Z 軸,作為一個無限量,不能為一個單一數,而應該是矩陣。
Z 軸必須是無限個量都為0,才是z=0平面,因此,需要用ones(N) 生成數量為N的,值都是1的有限矩陣,也即單位矩陣,然后生成的平面才是 軸平面。
而 ones(N)-1;生成的即是0矩陣。演示如下:
5) xlabel(str),ylabel(str),zlabel(str) 函數傳入的字符串,作為軸標題(title),alpha(n)傳入的是浮點數,作為透明百分比。
對上面圖形稍加旋轉,獲得題圖,證明確實題目條件有誤。 應該是 x+z = pi/2
進行對比:
原題解答:
Todo
更近一步可以着手研究交叉線和交叉平面的表示方式,參照參考文獻[6]。
但是參考文獻6使用 contourslice 函數只是實現了輪廓線的畫法,還不是最終的想法,后續再進行研究。
參考文獻
[1]. 用matlab作出拋物柱面y^2=x和平面x+z=1相交的圖形具體步驟_百度知道
[2]. matlab高手幫我看看怎么把幾個相交的曲面弄透明,匯出交線~~~~~~~~~~~~~~~_百度知道
[3]. 創建三維繪圖 - MATLAB & Simulink Example - MathWorks 中國
[4]. Matlab繪圖基礎——colormap在數字圖像處理及三維圖形展示上的應用(分層設色) - 司徒鮮生 - 博客園