Matlab绘制线条显示填充区域

时间:2013-10-11 02:18:36

标签: matlab fill edge

我写了一个程序,创建一个六边形网格,一些黑色,一些白色。这是随机完成的。然后我随机选择一个六边形的子集,在其边缘放置红色钻石。该脚本旨在构建具有颗粒(六边形)和孔隙空间(菱形)的假装岩石微结构,用于材料建模。我正在使用fill()命令来创建每个形状。问题是,当我填写红色钻石时,它下面的六边形边缘仍然显示出来。我试图发布图片,但由于这是我第一次发帖,所以不会让我。如果有人想看,我可以通过电子邮件发送。

所以要创建黑色六边形:

h= fill(hexXY(i,j,1)+vx,hexXY(i,j,2)+vy,'k');

set(h,'edgecolor','k')

其中hexXY矩阵包含六边形中心的x和y坐标,它们添加到vx和vy数组中,给出六边形上每个点的顶点。然后我用钻石做同样的事情:

h=fill(hexXY(i,j,1)+dvx,hexXY(i,j,2)+dvy,'r');

set(h,'edgecolor','r')

但是,正如我所说,六边形的黑色边缘透过红色显示。我按顺序提供了顶点,就像你绘制它们一样,尽管我认为这不重要。我试过uistack和使用补丁,但都没有为我工作。我不能将六边形边缘颜色设置为无,因为我也有白色六边形,如果我将背景颜色设置为黑色,我会在白色六边形之间产生黑色线条。我删除了必须从黑色或白色六边形中删除边缘,因为在两个触摸的地方,边缘会产生混乱的像素化。

任何人都可以帮我弄清楚如何正确填充红色钻石吗?

编辑:我之前没有提到过,这只会在保存图片时出现。你无法在图窗口中看到它。我尝试使用print()和hgexport(),并更改渲染器,但无济于事。这是一个小例子,从我的代码中拉出数字来运行:

hold on
v1=[0.3929 0.4107 0.3929 0.3571 0.3393 0.3571];
v2=[0.6907 0.6598 0.6288 0.6288 0.6598 0.6907];
h= fill(v1,v2,'k');
set(h,'edgecolor','k')

v3=[0.3750 0.3929 0.3750 0.3571 0.3750];
v4=[0.6366 0.6288 0.6211 0.6288 0.6366];
h=fill(v3,v4,'r');
set(h,'edgecolor','r')

set(gca,'position',[0 0 1 1],'units','normalized')
set(gcf,'PaperUnits','Inches','PaperPosition',[0 0 5 5]);
hgexport(gcf, 'test', hgexport('factorystyle'), 'Format', 'tiff','Resolution',600);

以下是使用hgexport保存的图片:

enter image description here

2 个答案:

答案 0 :(得分:1)

尝试使边缘透明:

set(h,'edgealpha',0)

奇怪的是导致原始问题。如果命令保持简单,一切看起来都很好:

h1= fill([1,2,3,3,2,1],[2,4,3,2,0,1],'m');
set(h1,'edgecolor','m')

hold on
h2= fill([2,3,2.5],[2,1,pi],'g');
set(h2,'edgecolor','g')

但是当前景三角形改变时,背景边缘向前移动。

set(h2,'edgealpha',0) % an example of what can cause the problem to appear.

我不知道是什么造成的。

答案 1 :(得分:1)

如果set(h,'edgealpha',0)不起作用(按照 @ user1739107 的建议),您可以尝试set(h,'edgecolor','none')

在OSX R2012b上,两种解决方案都可以正常工作。