2011-09-06 80 views
4

我在用windows xp在Matlab 2010b中修补程序绘图时遇到了一些奇怪的问题。
当我尝试绘制下面的补丁时,我得到一个不是全部填充的补丁,但有一些空白部分。修补程序透明度问题(FaceAlpha)

如果我将渲染器设置为'画家'(见下文),
但这样我就无法更改该补丁的透明度,这可以解决。
有没有人遇到过类似的问题?任何解决方法?

x = [734608.791666667;734608.843750000;734609;734609.041666667;734609.086805556;734609.125000000;734609.250000000;734609.277777778;]; 
y = [85.7847149493030;95.4499999983124;96.4800000077516;112.549999984098;109.949999996456;118.299999970804;120.450000002981;112.600000008944;]; 

figure; 
set(gcf, 'Renderer', 'opengl'); 
patch(x, y, 'r'); 
title('this plot is with wrong vertices positions'); 

figure; 
set(gcf, 'Renderer', 'painters'); 
patch(x, y, 'r', 'FaceAlpha', 0.1); 
title('this plot is OK, but renderer ignores the transparency'); 

figure; 
set(gcf, 'Renderer', 'opengl'); 
patch(x, y, 'r', 'FaceAlpha', 0.1); 
title('this plot is with wrong vertices positions, but with transparency'); 
+0

+1的确很怪异。我想知道它是否也可以在Mac/Linux上重现(您应该将其作为MathWorks的错误文件) – Amro

回答

4

问题似乎从浮点精度某处MATLAB发起 - > OpenGL渲染管道(我猜测)。

如果操纵x到:

x = [734608.791666667;734608.843750000;734609;734609.041666667;734609.086805556;734609.125000000;734609.250000000;734609.277777778;]; 
x = (x - mean(x)); 

的曲线似乎很好地工作。

+0

确实可行。由于x值实际上是datenums,我使用x = x-floor(min(x))来代替。谢谢! –