0

当我在 matlab 图形中生成一组矩形补丁时,一些矩形边缘被渲染为弯曲或剪裁而不是锐利,这是不需要的。这取决于比例,放大图像往往会消除效果。我认为这可能与混叠/压缩效果有关。奇怪的是,使用rectangle这个问题似乎消失了。

这是中间放大问题的示例(其他问题,例如不应该存在的虚线边框也很明显):

在此处输入图像描述

该代码来自另一个问题的答案:

H=Hadamard(48); %# now to row-double the matrix 
A=(1+H)/2;
B=(1-H)/2;
C=[A; B]; %# the code below randomly permutes elements within the rows of the matrix 
[nRows,nCols] = size(C); 
[junk,idx] = sort(rand(nRows,nCols),2); %# convert column indices into linear indices 
idx = (idx-1)*nRows + ndgrid(1:nRows,1:nCols); %# rearrange whatever matrix 
E = C; 
E(:) = E(idx);
[X Y] = find(logical(E));
xl = length(X);
yl = length(Y);
figure, hold on
for ii=1:xl
     patch(X(ii) + [0 0 1 1],Y(ii) + [0.15 0.9 0.9 0.1],[1 1 1],'Edgecolor',[1 1 1])
end
axis([0 max(X)+1 0 max(Y)+1])
axis('square')
set(gca,'color',[0 0 0])
set(gca,'XTickLabel',[],'YTickLabel',[],'XTick',[],'YTick',[])

我的问题是:(1) 是否有可能(以及如何)在用于在屏幕上显示整个图形的低到中等放大倍率下消除所示示例中看到的补丁对象的弯曲角和其他故障。(2) 最重要的是能够生成缺少弯角的图像文件(jpg、png、pdf...)。我研究过的所有格式似乎都可以保留不需要的效果。回答 2 使回答 (1) 本质上不重要,回答 (1) 大概解决了 (2)。

编辑

既然使用时问题就消失了rectangle,这似乎是matlab渲染引擎的问题?注意:该示例是使用 R14 生成的,但链接到的问题的 OP 有类似的问题(matlab 版本未知)。

我浏览了可用于补丁对象的各种照明和边缘表示选项,但没有观察到任何改进。

4

1 回答 1

0

这个问题很可能是重复的,例如在这里问了一个类似的问题。

答案似乎是patch在绘制矩形时避免显式使用。使用其中一个fill或只是rectangle代替。据我所知,以下生成图形的方法提供了几乎相同的结果:

load had.mat % <-- load the data containing the matrix of interest in array E
[X Y] = find(logical(E));
xl = length(X);
yl = length(Y);
figure, hold on
for ii=1:xl
      rectangle('Position',[X(ii) Y(ii)+.2 1 0.8],'facecolor',[1 1 1],'edgecolor',[1 1 1])
%     fill([X(ii) X(ii) X(ii)+1 X(ii)+1], [Y(ii)+0.2 Y(ii)+0.8 Y(ii)+0.8 Y(ii)+0.2],[1 1 1],'edgecolor',[1 1 1],'marker','.','markersize',1)
end
set(gca,'color',[0 0 0])
set(gca,'XTickLabel',[],'YTickLabel',[],'XTick',[],'YTick',[])
set(gcf,'Renderer','zbuffer')
于 2013-08-17T14:42:34.067 回答