![METAPOST:剪辑错误](https://linux22.com/image/419150/METAPOST%EF%BC%9A%E5%89%AA%E8%BE%91%E9%94%99%E8%AF%AF.png)
看起来
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_bbox
是mp.w
— 你会发现介绍性评论说:
@ 查找边缘结构的边界框的主要困难在于剪切路径的影响。我们保守地处理它们,只剪切到剪切路径的边界框,但这仍然需要递归调用才能
set_bbox
找到要剪切的对象的边界框。此类调用的特点是布尔参数top_level
为 false。
这正是本例中发生的情况。原帖开头是一条 V 形路径,其构造方式是bbox
该路径的 大约为 10 厘米见方。然后将其剪切到另一个 10 厘米见方的正方形上,向下移动约 9 厘米。结果是一张带有 的图片,bbox
它是这两个正方形的重叠部分——一个大约 10x1 厘米的矩形,V 形的底部位于中间。
我猜想这里有一个原始设计的权衡,MP 的设计者决定保持简单,让语言的用户自己解决如何处理边缘情况。