MATLAB分享 - 包含投影的三維等值面圖
上圖裡面的isosurface就是官方文檔里的圖,直接用在這裡作為例子了。
[x,y,z,v] = flow;np = patch(isosurface(x,y,z,v,-3));nisonormals(x,y,z,v,p)np.FaceColor = red;np.EdgeColor = none;ndaspect([1,1,1])nview(3); axis tightn% 下面裝燈,我感覺放兩個燈(拷貝兩遍)比較合適,一個太暗了。n% 最多可以放8個燈,headlight表示頭燈,還有left和right。ncamlight(headlight) nlighting gouraudncamlight(right)nlighting gouraudn
難點是三個坐標平面的投影圖,從網上找了一圈都沒看到合適的,看來只能自己想辦法了。
如果你僅僅要做xy平面的投影圖,那麼這個問題會簡單些。投影面可以用surf函數,把高度設為你想要位置的一個平面(例如),顏色設為你想要的顏色即可。
flow_xy=v(:,:,12);nx_xy=x(:,:,12);ny_xy=y(:,:,12);nxy=-5*ones(size(flow_xy));nsurf(x_xy,y_xy,xy,flow_xy,edgecolor,none)n
畫出來是這樣
但是如果要畫yz和zx平面的投影,這個想法就不奏效了。
接下來我找到了slice這個函數,它可以畫出你指定的截面。所以這個問題就可以用這個函數解決了,思路是這樣:在x軸最大值處,y軸最大值處,和z軸最小值處的slice平面就是我們想要的投影面。
然而呢,你試一試就會知道,上面的思路離答案還有一段距離。因為slice函數畫的是你設的截面處的值,而我們想在投影面畫的是圖形中某處的切面值。所以按照上面思路畫的圖中的三個面實際上是邊界處的值。
解決方案嘛,其實很簡單。你把你想要的切面值拷貝到邊界處就好了嘛。
代碼比如可以這樣寫
vx=zeros(size(v));nvx(:,size(v,2),:)=v(:,25,:);nhx = slice(x,y,z,vx,xmax,[],[]);nhx.FaceColor = interp;nhx.EdgeColor = none;n
最後,調節一下光照和材質即可。
推薦閱讀:
※有正整數1~10,出現的概率分布給定,如何利用MATLAB按照各數字出現的概率輸出一個數字?
※MATLAB神經網路(一):BP神經網路
※matlab小工具-Matlab Coder
※MATLAB編輯器如何自動給代碼操作符前後加空格?
※matlab的floor函數是否有bug?
TAG:MATLAB |