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;
 %显示色阶的颜色栏,可以通过设置它的属性对它进行相关操作

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;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章