我见过这个帖子用于 3D,但我无法让它在 2D 中工作。
这是我的代码:
pair O1 = origin;
pair O2 = (1.5,0);
pair O3 = (1,-1);
pair C = (0.75,sqrt(7)/4);
pair F = (0.75,-sqrt(7)/4);
pair E = (1,0);
pair B = (0,-1);
pair D = (((1/20)*(25-2*sqrt(55))),((1/8)+(1/40)*(2*sqrt(55)-25)));
pair A = (((1/20)*(25+2*sqrt(55))),((1/8)+(1/40)*(-2*sqrt(55)-25)));
label("$C$",C,N);
label("$F$",F,E);
label("$E$",E,NE);
label("$B$",B,SW);
label("$D$",D,W);
label("$A$",A,SE);
draw(circle(O1,1));
draw(circle(O2,1));
draw(circle(O3,1));
draw(arc(O1,E,C),blue+linewidth(5));
我想沿着一些交叉点画一条粗线。有没有办法做类似的事情
draw(arc(center,coordinate1,coordinate2),linewidth(2));
描绘一条路径?这与指定起始和终止角度相反。例如,
draw(arc(O1,E,C),linewidth(2));
答案1
是的,这正是要做的。这是你想要的吗?
// darcs.asy :
size(200);
// Drawing arc with coordinates in 2D in asymptote
texpreamble("\usepackage{lmodern}");
pair O1 = (0,0);// origin;
pair O2 = (1.5,0);
pair O3 = (1,-1);
pair A = (((1/20)*(25+2*sqrt(55))),((1/8)+(1/40)*(-2*sqrt(55)-25)));
pair B = (0,-1);
pair C = (0.75,sqrt(7)/4);
pair D = (((1/20)*(25-2*sqrt(55))),((1/8)+(1/40)*(2*sqrt(55)-25)));
pair EE = (1,0);
pair F = (0.75,-sqrt(7)/4);
pen linePen=darkblue+1bp;
pen markPenA=red+3bp+opacity(0.8);
pen markPenB=green+3bp+opacity(0.8);
draw(circle(O1,1),linePen);
draw(circle(O2,1),linePen);
draw(circle(O3,1),linePen);
draw(arc(O1,EE,C),markPenA);
draw(arc(O1,C,EE),markPenB);
dot(new pair[]{A,B,C,D,EE,F},darkblue,UnFill);
label("$A$",A,SE);
label("$B$",B,SW);
label("$\,C$",C,N);
label("$D$",D,NW);
label("$E$",EE,NE);
label("$F$",F,E);
注意:在 s 位置N,S,E,W,NE,NW,SE,SW
中使用的名称是预定义的label
,因此最好避免重新定义和使用,例如,EE
而不是E
。
答案2
针对非常老的问题的一个更简单的 Asymptote 代码。
// http://asymptote.ualberta.ca/
unitsize(1cm);
real r=2;
path c1=circle((0,0),r);
path c2=circle((3,0),r);
path c3=circle((2,-2.5),r);
draw(c2^^c3);
pair A=intersectionpoints(c1,c2)[0];
pair B=intersectionpoints(c1,c3)[1];
path g=arc((0,0),A,B);
path h=arc((0,0),A,B,CW);
draw(g,blue+1pt);
draw(h,green+1pt);
dot("$A$",align=2N,A,red);
dot("$B$",align=SE,B,red);
shipout(bbox(5mm,invisible));