如何旋转图片而不改变标签属性?

如何旋转图片而不改变标签属性?
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,即仅随嵌入图片移动和旋转。

其他可能的值是ShiftSlant和。ScaleRotate(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到当前图片中。

相关内容