1

我编写了一个程序,可以创建一个六边形网格,一些是黑色的,一些是白色的。这是随机完成的。然后我随机选择一个六边形子集,在其边缘放置红色菱形。该脚本旨在构建具有晶粒(六边形)和孔隙空间(菱形)的假想岩石微观结构,用于材料建模。我正在使用 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

在此处输入图像描述

4

2 回答 2

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.

我不知道是什么原因造成的。

于 2013-10-11T02:50:43.720 回答
1

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

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

于 2013-10-11T21:07:26.970 回答