天天看點

matlab 空間曲面的繪制

isosurface + patch + isonormals

isosurface

等值面函數

調用格式:

fv = isosurface(X,Y,Z,V,isovalue)

X,Y,Z為由meshgrid生成的空間網格點的位置。

設f(x,y,z)為隐函數,則

V = f(x,y,z).isovalue

為等值面的數值.若畫隐函數的曲面,則必須為0.傳回值fv是一個結構體,包含等值面的表面(faces)和頂點(vertices)資料

patch

補片函數,填充多邊形

調用格式:

patch(X,Y,C)

以平面坐标(X,Y)為頂點,構造平面多邊形,C是RGB顔色變量

patch(X,Y,Z,C)

以空間坐标

(X,Y,Z,C)

為頂點,構造空間3D曲面

patch(fv)

通過包含

vertices、faces

兩個域的結構體fv來構造3D曲面。fv可以直接由等值面函數 isosurface 得到

patch(‘Faces’,F,’Vertices’,V)
           

示例:

v = [2 4;2 8;8 4;5 0;5 2;8 0]; %六個頂點
 f = [1 2 3;4 5 6]; %兩個面
 col = [0;6;4;3;4;6];
 patch('Faces',f,'Vertices',v, 'FaceVertexCData',col,'FaceColor','interp');
 colorbar;
 %顯示色階的顔色欄,可以通過設定它的屬性對它進行相關操作
           
matlab 空間曲面的繪制

isonormals

等值面法線函數

調用格式:

n = isonormals(X,Y,Z,V,p)

其中p是patch傳回得到的句柄.計算等值面V的頂點法線(n),将patch曲面p的法線設定為計算得到的法線.如果不設定法線的話,得到曲面在過渡地帶看起來可能不是很光滑.

f = @(x,y,z) x.^2+y.^2+z.^2-1; %球面隐函數
 [x,y,z] = meshgrid(-2:.1:2,-2:1:2,-2:.1:2);
 v = f(x,y,z);
 fv = isosurface(x,y,z,v,0);
 hp = patch(fv);
 isonormals(x,y,z,v,hp);
 set(hp,'Facecolor','r','Edgecolor','none');
 alpha(1),view([1,1,1]);
 grid on,axis equal;
 camlight,lighting gouraud;
           
matlab 空間曲面的繪制

繼續閱讀