isosurface函數可以畫隱函數的等值曲線或曲面
如畫笛卡爾心形函數,其方程爲(x^2 + (9/4)y^2 + z^2 - 1)^3 - x^2z^3 - (9/80)y^2z^3 = 0
由於是隱函數,不好用一般的方法畫出其圖形來,這就可以用isosurface來實現,代碼如下
figure
[x,y,z]=meshgrid(linspace(-3,3)); %做出網格meshgrid
p=(x.^2+(9/4)*y.^2+z.^2-1).^3-x.^2.*z.^3-(9/80)*y.^2.*z.^3; %實現結果的表達
isosurface(x,y,z,p,0,x);
axis equal;
axis off;
view(0,45); %視角的控制
colormap([1 0 0]); %繪圖顏色紅色
brighten(0.5); %增亮
camlight right; %光源位置
lighting phong; %光照模式
代碼參考http://blog.sina.com.cn/s/blog_4b013fb10100llxh.html(待看)
另外這個函數還有一個好處是,可以得到等值面的頂點和麪,然後可以直接調用patch畫出來
fv = isosurface(x,y,z,p,0);
patch(fv)
這一點很好,可以將得到的頂點和麪保存到文件,用opengl畫出來,可以更好的渲染圖形,這點已經實現。
下面簡單翻譯一下help裏的解釋吧:
isosurface函數用於由體積數據中提取等值數據。
使用方法如下
fv = isosurface(X,Y,Z,V,isovalue)
fv = isosurface(V,isovalue)
fvc = isosurface(...,colors)
[f,v] = isosurface(...)
[f,v,c] = isosurface(...)
isosurface(...)
參數意義爲,從由X,Y,Z構造的體積V數據中提取由isovalue指定的等值數據,返回結果fv爲一個結構體,包含了等值面的頂點和麪(頂點的次序),這些參數可以直接傳給patch命令畫出圖形來。
另外,可以在最後加上colors,返回值中也會得到每個面的顏色插值,這樣能夠使你用不同於計算等值面的數據控制等值面的顏色映射。
如果不設置返回值,就會自動在當前座標系裏用計算得到的頂點和麪創建三維patch對象。