为什么转换不适用于图片内的标签?

为什么转换不适用于图片内的标签?

变换可应用于对、参考线、路径、笔、字符串、变换、框架和 图片通过左边的乘法(通过二元运算符 *)。

然而,

unitsize(1cm);
picture pic1;
// unitsize(pic1,1cm);
path p1=(1,1.5)--(1.5,.5)--(2,1.5)--(2.5,.5)--(3,1.5)--(3.5,.5)--(4,1.5)--(4.5,.5)--(5,1.5);
label(pic1,Label("Hello World! I am"),(0,2));
draw(pic1, p1, 2bp+red);
fill(pic1,box((2.5,.1),(3.5,1.9)),green);
fill(pic1,shift(2.25,.3)*unitsquare,yellow);

// add(pic1.fit());
// add(reflect((0,0),(5,0))*pic1.fit());
add(pic1);
add(reflect((0,0),(5,0))*pic1);
shipout(bbox(1mm,invisible));

不起作用。

在此处输入图片描述

问:为什么?

答案1

如果我理解文档Label有一个选项embed

  • Shift :仅嵌入图片时移动;
  • 旋转:仅对嵌入图片进行移动和旋转(默认);
  • 旋转(对 z):用(图片变换的)向量 z 旋转。
  • 倾斜:仅对嵌入图片进行平移、旋转、倾斜和镜像;
  • 缩放:平移、旋转、倾斜、反射和缩放嵌入图片。

因此在下面的例子中,ShiftLabel 不会旋转:

unitsize(1cm);
picture pic1;
size(pic1,10cm);
path p1=(1,1.5)--(1.5,.5)--(2,1.5)--(2.5,.5)--(3,1.5)--(3.5,.5)--(4,1.5)--(4.5,.5)--(5,1.5);
label(pic1,Label("Hello World! I am",embed=Shift),(0,2));
draw(pic1, p1, 2bp+red);
fill(pic1,box((2.5,.1),(3.5,1.9)),green);
fill(pic1,shift(2.25,.3)*unitsquare,yellow);

add(pic1);
add(rotate(90)*pic1);

shipout(bbox(1mm,invisible));

在此处输入图片描述

使用Rotate(默认值)标签会旋转。


unitsize(1cm);
picture pic1;
size(pic1,10cm);
path p1=(1,1.5)--(1.5,.5)--(2,1.5)--(2.5,.5)--(3,1.5)--(3.5,.5)--(4,1.5)--(4.5,.5)--(5,1.5);
label(pic1,Label("Hello World! I am",embed=Rotate),(0,2));
draw(pic1, p1, 2bp+red);
fill(pic1,box((2.5,.1),(3.5,1.9)),green);
fill(pic1,shift(2.25,.3)*unitsquare,yellow);

add(pic1);
add(rotate(90)*pic1);

shipout(bbox(1mm,invisible));

在此处输入图片描述

因此,在 Chishimotoji 的例子中,结果是正确的,因为reflect默认行为不考虑Rotate。添加embed=Slant应该有效,但事实并非如此。

unitsize(1cm);
picture pic1;
size(pic1,10cm);
path p1=(1,1.5)--(1.5,.5)--(2,1.5)--(2.5,.5)--(3,1.5)--(3.5,.5)--(4,1.5)--(4.5,.5)--(5,1.5);
label(pic1,Label("Hello World! I am",embed=Slant),(0,2));
draw(pic1, p1, 2bp+red);
fill(pic1,box((2.5,.1),(3.5,1.9)),green);
fill(pic1,shift(2.25,.3)*unitsquare,yellow);

add(pic1);
add(reflect((0,0),(5,0))*pic1);

shipout(bbox(1mm,invisible));

生产

在此处输入图片描述

reflect((0,0),(5,5))尽管正常,但另一种反射却给出了奇怪的结果:

unitsize(1cm);
picture pic1;
size(pic1,10cm);
path p1=(1,1.5)--(1.5,.5)--(2,1.5)--(2.5,.5)--(3,1.5)--(3.5,.5)--(4,1.5)--(4.5,.5)--(5,1.5);
label(pic1,Label("Hello World! I am",embed=Slant),(0,2));
draw(pic1, p1, 2bp+red);
fill(pic1,box((2.5,.1),(3.5,1.9)),green);
fill(pic1,shift(2.25,.3)*unitsquare,yellow);

add(pic1);
add(reflect((0,0),(5,5))*pic1);

shipout(bbox(1mm,invisible));

在此处输入图片描述

我不明白为什么它不起作用。

用它frame代替picture就可以了。

相关内容