◎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;
%顯示色階的顏色欄,可以通過設置它的屬性對它進行相關操作
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;