变换可应用于对、参考线、路径、笔、字符串、变换、框架和 图片通过左边的乘法(通过二元运算符 *)。
然而,
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 旋转。
- 倾斜:仅对嵌入图片进行平移、旋转、倾斜和镜像;
- 缩放:平移、旋转、倾斜、反射和缩放嵌入图片。
因此在下面的例子中,Shift
Label 不会旋转:
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
就可以了。