[matlab][isosurface]畫隱函數的等值曲線或曲面

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對象。

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