心
今天看到某人用另一鄙人不熟悉的数学工具绘了一个三维的心形图……

于是想用MATLAB试试……但是发现貌似MATLAB里面没有现成的画三维隐函数的函数……

以前也没有画过……见过的都是可以解出解析式的或者可以用参数方程表示的……折腾了很久……

先看一个函数……isosurface:

isosurface是用来绘制等值面的函数。
如果函数有返回值,则生成的是曲面的三角网格节点和边的集合,之后需要用patch绘制。实际上得到的并不是类似用mesh或surf之类得到的网格图(surface),而是三角网格图(patch)。(但是用isosurface是目前我所知可以用来绘制一般隐函数曲面的唯一办法。暂时还未找到生成一般隐函数曲面的网格图的好办法。)
isosurface的用法还是自己看帮助文件比较好,一时半会也说不完整。大概的意思是:
fv=isosurface(x,y,z,v,val)
其中xyz是整个三维空间的网格点,可以用meshgrid生成。
v是对应于坐标(x,y,z)处的函数值
val是你要取的值,之后得到的fv就是v=val处的等值面的xyz的坐标信息,实际上是三角网格点和边的集合。
我们要绘制当v=f(x,y,z)=0处的隐函数曲面,就取val=0。

来个范例:

绘制隐函数(x^2+(9/4)*y^2+z^2-1)^3-x^2*z^3+(9/80)*y^2*z^3=0的图像(一颗爱心),这个方程还是挺有意思的

[x,y,z]=meshgrid(linspace(-1.3,1.3));
val=(x.^2 + (9/4)*y.^2 + z.^2 - 1).^3 - x.^2.*z.^3 - (1/9)*y.^2.*z.^3;
isosurface(x,y,z,val,0)
axis equal
view(-10,24)