我正在为 AoPS wiki 上的解决方案制作图表,有些标签太近了,让人不舒服。有没有办法将标签移得离我要标记的内容更远?到目前为止,我有以下代码:
import olympiad;
import geometry;
size(300);
defaultpen(0.8);
pair C=(0,0),A=(0,3),B=(4,0),D=(4-2.28571,1.71429);
pair O=incenter(A,C,D), P=incenter(B,C,D);
line cd = line(C, D);
picture p = new picture;
picture q = new picture;
picture r = new picture;
picture s = new picture;
draw(p,Circle(C,0.2));
clip(p,P--C--D--cycle);
draw(q, Circle(C, 0.3));
clip(q, O--C--D--cycle);
line l1 = perpendicular(O, cd);
draw(r, l1);
clip(r, C--D--O--cycle);
line l2 = perpendicular(P, cd);
draw(s, l2);
clip(s, C--P--D--cycle);
add(p);
add(q);
add(r);
add(s);
draw(A--B--C--D--C--cycle);
draw(incircle(A,C,D));
draw(incircle(B,C,D));
draw(C--O);
draw(C--P);
dot(O);
dot(P);
point inter1 = intersectionpoint(l1, cd);
point inter2 = intersectionpoint(l2, cd);
dot(inter1);
dot(inter2);
label("\(A\)",A,W);
label("\(B\)",B,E);
label("\(C\)",C,W);
label("\(D\)",D,NE);
label("\(O_a\)",O,W);
label("\(O_b\)",P,E);
label("\(3\)",(A+C)/2,W);
label("\(4\)",(B+C)/2,S);
label("\(\frac{15}{7}\)",(A+D)/2,NE);
label("\(\frac{20}{7}\)",(B+D)/2,NE);
label("\(M\)", inter1, W);
label("\(N\)", inter2, E);
并且 M 和 N 的标签与我绘制的线太接近了。谢谢!
顺便问一下,定义这么多图片是好的做法吗?我刚开始使用 Asymptote,感觉它不太优雅。
答案1
来自文档(asymptote.pdf, 4.4 label
):
... 如果
align
是NoAlign
,标签将以用户坐标为中心;否则,它将沿着偏移量position
的方向对齐align
并偏移。position
PostScript
align*labelmargin(p)
因此,要进一步朝着 的方向移动标签,只需align
尝试 ,例如2W
,2E
而不是W
。E
顺便说一句,默认align
方向常量在基础模块中定义plain_constants.asy
并在基础模块中加载plain.asy
,因此使用plain.E
, 而不是仅仅plain.W
,更安全, 以避免与局部变量名称发生潜在的名称冲突(例如非常常见的情况)。plain.NE
E
W
NE
pair A,B,C,D,E,F;
picture
当需要进行某些转换或打算重复使用时,使用单独的转换会很方便。否则,只需使用默认转换currentpicture
就足够了,但这也可能是个人喜好或习惯的问题。