2012-07-20 72 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

相关问题