import graph;
import patterns;
size(300);
pair O=(0.3,-1),M=(2,.5);
real f1(real x) {return 2*cos(x);}
path Cf1=graph(f1,-3.14,3.14,n=400);
path c1=circle(O,abs(O-M));
pair[] t=intersectionpoints(Cf1,c1);
dot("$t[0]$",t[0],W,blue);
dot("$t[1]$",t[1],NW,green);
dot("$t[2]$",t[2],NE,red);
dot("$t[3]$",t[3],orange);
real[][] A = intersections(Cf1,c1);
path kn10=subpath(c1,A[1][1],A[0][1]);
path kn21=subpath(c1,A[2][1],A[1][1]);
path kn01=subpath(Cf1,A[0][0],A[1][0]);
path kn12=subpath(Cf1,A[1][0],A[2][0]);
path kn23=subpath(Cf1,A[2][0],A[3][0]);
add("hatchback",hatch(NW));
add("Hatchback",hatch(NE));
fill(kn01--kn10--cycle,red+opacity(.5));
fill(kn21--kn12--cycle,green+opacity(.5));
fill(kn21--kn12--cycle,pattern("hatchback"));
fill(arc(O,t[3],t[2])--kn23--cycle,blue+opacity(.5));
fill(kn01--reverse(arc(O,t[2],t[1]))--kn23--reverse(arc(O,t[0],t[3]))--cycle,pattern("Hatchback"));
draw(Cf1^^c1);
我的问题:如何旋转this
图片而不改变标签属性?
我是说:
我的输出
但我想要这样
答案1
该Label
命令有一个embed
选项。按照文档,embed 参数决定标签应如何随嵌入图片变换。默认情况下是Rotate
,即仅随嵌入图片移动和旋转。
其他可能的值是Shift
、Slant
和。Scale
Rotate(pair z)
对于这个问题来说Shift
是相关的,因为它仅对应于嵌入图片的移位。
以下代码生成初始图片和旋转版本,其中只有标签t[1]
和t[2]
被旋转。
import graph;
import patterns;
size(300);
pair O=(0.3,-1),M=(2,.5);
real f1(real x) {return 2*cos(x);}
path Cf1=graph(f1,-3.14,3.14,n=400);
path c1=circle(O,abs(O-M));
pair[] t=intersectionpoints(Cf1,c1);
dot(Label("$t[0]$",embed=Shift),t[0],W,blue);
dot(Label("$t[1]$"),t[1],NW,green);
dot(Label("$t[2]$"),t[2],NE,red);
dot(Label("$t[3]$",embed=Shift),t[3],orange);
real[][] A = intersections(Cf1,c1);
path kn10=subpath(c1,A[1][1],A[0][1]);
path kn21=subpath(c1,A[2][1],A[1][1]);
path kn01=subpath(Cf1,A[0][0],A[1][0]);
path kn12=subpath(Cf1,A[1][0],A[2][0]);
path kn23=subpath(Cf1,A[2][0],A[3][0]);
add("hatchback",hatch(NW));
add("Hatchback",hatch(NE));
fill(kn01--kn10--cycle,red+opacity(.5));
fill(kn21--kn12--cycle,green+opacity(.5));
fill(kn21--kn12--cycle,pattern("hatchback"));
fill(arc(O,t[3],t[2])--kn23--cycle,blue+opacity(.5));
fill(kn01--reverse(arc(O,t[2],t[1]))--kn23--reverse(arc(O,t[0],t[3]))--cycle,pattern("Hatchback"));
draw(Cf1^^c1);
picture pic1;
size(pic1,300);
add(pic1,rotate(120)*currentpicture);
shipout("rotate_example",pic1);
结果
正如 Justonly 所观察到的,为了避免创建额外的输出,请shipout("rotate_example",pic1);
用命令替换shipout(bbox(pic1,2mm,invisible));
另一种可能性是先创建一张图片pic1
,然后将其添加pic1
到当前图片中。