https://www.ilovematlab.cn/thread-264471-1-1.html
解决办法一:isosurface + patch+ isonormals
实现原理:先定义3元显函数v =f(x, y, z), 则 v = 0 定义的等值面就是z = g(x,y)的3D曲面。利用isosurface函数获取v= 0 的等值面,将得到的等值面直接输入给patch函数,得出patch句柄p,并画出patch曲面的平面视角图形。对p用isonormals函数设置曲面顶点数据的法线,最后设置颜色、亮度、3D视角,得到3D曲面。
代码如下:
f = @(x,y,z) x.*y.*z.*log(1+x.^2+y.^2+z.^2)-10; % 函数表达式
[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
代码说明:
alpha函数用于设置patch曲面的透明度(可以是0~1任意数值),1 表示不透明,0 表示最大透明度。如果想设置透明度为0.7,可以修改alpha(1)为alpha(0.7)。
使用此代码解决特定问题时,只需将第1行的函数表达式替换为特定问题的函数表达式,将第2行数据(x、y、z)范围换成合适的范围,后续代码无需任何变动。
解决办法三:第三方工具包ezimplot3
在matlab central 的 file exchange 上有一个非常优秀的绘制3维隐函数的绘图函数,叫ezimplot3。感兴趣的可以在如下链接下载:
http://www.mathworks.com/matlabcentral/fileexchange/23623-ezimplot3-implicit-3d-functions-plotter
也可以直接从本帖下载: ezimplot3.zip (3.71 KB, 下载次数: 25798)
ezimplot3一共有三种参数调用方式:
ezimplot3(f) 画函数f(X,Y,Z)= 0 在-2pi< X < 2 pi, -2* pi < Y < 2* pi, -2* pi < Z < 2* pi上的图形
ezimplot3(f, [A,B])画函数f(X,Y,Z)= 0 在A< X < B, A < Y < B, A < Z < B上的图形
ezimplot3(f, [XMIN,XMAX,YMIN,YMAX,ZMIN,ZMAX])画函数f(X,Y,Z)= 0 在XMIN< X < XMAX, YMIN < Y < YMAX, ZMIN < Z < ZMAX上的图形
ezimplot3使用方法:解压ezimplot3.zip,将解压得到的ezimplot3.m 添加到matlab当前搜索路径后就可以使用了。然后,可以直接在command window 输入代码:
f = @(x,y,z) x*y*z*log(1+x^2+y^2+z^2)-10;
ezimplot3(f,[-10,10]); % [-10, 10] 表示图形范围x、y、z都在区间[-10, 10]