2012-07-20 29 views
4

介紹如何emphase球形表面上的一些區域

我想emphase球形表面上說,這個區域應該是彩色的不透明的(alpha = 1.0)和其他地區的一些區域球體應該被上色爲半透明(alpha = 0.5)。

問題

考慮WAlpha(Data >= DummyValue) = 1.0和​​,如所預期的以下命令不起作用:

surf(X, Y, Z, Data, 'AlphaData', WAlpha, 'FaceAlpha', 'interp'); 

它繪製所有未被選擇的區域作爲全透明:

Wrong transparency

注意

我沒有任何問題,當設置 'FaceAlpha' 來標值(即它不是我的圖形卡問題):

surf(X, Y, Z, Data, 'AlphaData', WAlpha, 'FaceAlpha', 0.5); 

Semi transparent everywhere

源代碼

下面是我創建的用於重現該問題的非常短且虛擬的代碼的鏈接:link

請讓我知道,如果你有任何其他想法強調選定的區域,而不是使用透明度。

回答

3

這裏是快速測試:

%# surface data 
Z = membrane; 

%# alpha-transparency matrix 
A = ones(size(Z))*0.3;   %# transparent by default 
A(abs(Z)>0.5) = 1;    %# make certain region opaque 

%# plot 
figure('Renderer','opengl') 
surf(Z, 'AlphaData',A, 'AlphaDataMapping','none', ... 
    'FaceAlpha','interp', 'EdgeColor','none') 

結果:

screenshot

+1

是的,猜測將'AlphaDataMapping'設置爲'none'或將'Alim'重置爲'[0 1]'結果都一樣。感謝您的幫助和測試用例。 – CitizenInsane 2012-07-20 15:22:21

1

哎呀,發現它...

人們需要改變Alim財產上axes對象,因爲它是不當設置爲[min(WAlpha) max(WAlpha)]設置AlphaData時,而不是保持[0 1]。因此,該命令是:

surf(X, Y, Z, Data, 'AlphaData', WAlpha, 'FaceAlpha', 'interp'); 
alim([0 1]); 
+0

如果此解決方案可以解決你的問題,你應該接受它 – slayton 2012-07-20 14:53:59

+0

我不能接受我自己答案爲2天(所以我接受@Amro的一個:P) – CitizenInsane 2012-07-20 15:25:59

相關問題