METAPOST:剪辑错误

METAPOST:剪辑错误

看起来

clip currentpicture to p;

不仅将图片剪辑到p,而且还以不可预测的方式设置其边界。

以下是 MWE:

filenametemplate "%j-%1c.png";
outputformat := "png";
beginfig(1);
save u;
u:=1cm;

draw (-1,-1)*u--(-10,10)*u--(10,10)*u--cycle withcolor (87, 1mm, -.5bp);
clip currentpicture to (-10,-10)*u--(-10,0)*u--(10,0)*u--(10,-10)*u--cycle;

endfig;
end

生成的图片左右两侧都有较大的空白空间(垂直尺寸符合预期):

在此处输入图片描述

答案1

我认为 OP 的期望与 Metapost 实际使用命令所做的事情不匹配clip。如果你检查源代码——特别mp_set_bboxmp.w— 你会发现介绍性评论说:

@ 查找边缘结构的边界框的主要困难在于剪切路径的影响。我们保守地处理它们,只剪切到剪切路径的边界框,但这仍然需要递归调用才能 set_bbox找到要剪切的对象的边界框。此类调用的特点是布尔参数top_level 为 false。

这正是本例中发生的情况。原帖开头是一条 V 形路径,其构造方式是bbox该路径的 大约为 10 厘米见方。然后将其剪切到另一个 10 厘米见方的正方形上,向下移动约 9 厘米。结果是一张带有 的图片,bbox它是这两个正方形的重叠部分——一个大约 10x1 厘米的矩形,V 形的底部位于中间。

我猜想这里有一个原始设计的权衡,MP 的设计者决定保持简单,让语言的用户自己解决如何处理边缘情况。

相关内容