MATLAB繪制3D隱函數(shù)曲面的方法總結(jié)
2017-03-28 by:CAE仿真在線 來源:互聯(lián)網(wǎng)
l. isosurface 等值面函數(shù)
調(diào)用格式:fv =
isosurface(X,Y,Z,V,isovalue)
作用:返回某個(gè)等值面(由isovalue指定)的表面(faces)和頂點(diǎn)(vertices)數(shù)據(jù),存放在結(jié)構(gòu)體fv中(fv由vertices、faces兩個(gè)域構(gòu)成)。如果是畫隱函數(shù) v = f(x,y,z) =
0 的三維圖形,那么等值面的數(shù)值為isovalue =
0。
2. patch函數(shù)
調(diào)用格式:patch(X,Y,C) 以平面坐標(biāo)(X, Y)為頂點(diǎn),構(gòu)造平面多邊形,C是RGB顏色向量
patch(X,Y,Z,C)以空間3-D坐標(biāo)(X,
Y,Z)為頂點(diǎn),構(gòu)造空間3D曲面,C是RGB顏色向量
patch(fv) 通過包含vertices、faces兩個(gè)域的結(jié)構(gòu)體fv來構(gòu)造3D曲面,fv可以直接由等值面函數(shù)isosurface得到
例如:patch(isosurface(X,Y,Z,V,0))
例如:patch(isosurface(X,Y,Z,V,0))
3. isonormals等值面法線函數(shù)
調(diào)用格式:isonormals(X,Y,Z,V,p)
實(shí)現(xiàn)功能:計(jì)算等值面V的頂點(diǎn)法線,將patch曲面p的法線設(shè)置為計(jì)算得到的法線(p是patch返回得到的句柄)。如果不設(shè)置法線的話,得到曲面在過渡地帶看起來可能不是很光滑
解決辦法一:isosurface
patch isonormals
實(shí)現(xiàn)原理:先定義3元顯函數(shù)v
=f(x, y, z), 則 v = 0 定義的等值面就是z =
g(x,y)的3D曲面。利用isosurface函數(shù)獲取v= 0 的等值面,將得到的等值面直接輸入給patch函數(shù),得出patch句柄p,并畫出patch曲面的平面視角圖形。對(duì)p用isonormals函數(shù)設(shè)置曲面頂點(diǎn)數(shù)據(jù)的法線,最后設(shè)置顏色、亮度、3D視角,得到3D曲面。
代碼如下:
-
f = @(x,y,z) x.*y.*z.*log(1 x.^2 y.^2
z.^2)-10;
% 函數(shù)表達(dá)式
-
[x,y,z] =
meshgrid(-10:.2:10,-10:.2:10,-10:.2:10);
%
畫圖范圍
-
v = f(x,y,z);
-
h = patch(isosurface(x,y,z,v,0));
-
isonormals(x,y,z,v,h)
-
set(h,'FaceColor','r','EdgeColor','none');
-
xlabel('x');ylabel('y');zlabel('z');
-
alpha(1)
-
grid on; view([1,1,1]); axis equal; camlight; lighting
gouraud
-
ezimplot3的方法實(shí)質(zhì)是跟方法1是一樣的。
補(bǔ)充一個(gè):MC(Marching Cube)方法,這是計(jì)算機(jī)圖像學(xué)中很有名的方法。
http://www.mathworks.com/matlabc ... 2506-marching-cubes
開放分享:優(yōu)質(zhì)有限元技術(shù)文章,助你自學(xué)成才
相關(guān)標(biāo)簽搜索:MATLAB繪制3D隱函數(shù)曲面的方法總結(jié) MatLab培訓(xùn) MatLab培訓(xùn)課程 MatLab在線視頻教程 MatLab技術(shù)學(xué)習(xí)教程 MatLab軟件教程 MatLab資料下載 MatLab代做 MatLab基礎(chǔ)知識(shí) Fluent、CFX流體分析 HFSS電磁分析 Ansys培訓(xùn) Abaqus培訓(xùn)
編輯