2012年3月25日日曜日

Asymptoteの練習 円環領域

Laurent展開の説明に出てくる円環領域の作図。
領域を斜線で表すのに初めてpatternsモジュールを用いた。
hatchが斜線を表す。
円周上に矢印を描くために小細工がしてある。
arcで描いた円周の内部を塗ろうとすると、pathがcyclicでないと怒られた。
cyclicにするにはどうするのだろう。

size(6cm);

import patterns;
defaultpen(fontsize(10pt));

real r1=3.2;
real r2=1.8;
path p2=arc((0,0),1,0,360);
path g2=scale(r2)*unitcircle;
path g1=scale(r1)*unitcircle;
path p1=arc((0,0),4,0,360);
path g2a=arc((0,0),r2,45,360,direction=CW);
path g2b=arc((0,0),r2,-135,180,direction=CW);
path g1a=arc((0,0),r1,0,45,direction=CCW);
path g1b=arc((0,0),r1,180,225,direction=CCW);

add("hatch",hatch(3,dir(45),gray(0.5)));
filldraw(g1^^g2,pattern("hatch")+evenodd);

label("$r_2$",(r2,0),(0.8,-1),Fill(white));
label("$\gamma_2^{-}$",(r2+0.65)*dir(140),Fill(white));

draw(p2);
draw(g2a,MidArcArrow(SimpleHead));
draw(g2b,MidArcArrow(SimpleHead));
draw(g1a,MidArcArrow(SimpleHead));
draw(g1b,MidArcArrow(SimpleHead));
draw(g2);
draw(g1);
draw(p1);


label("$z$",((r1+r2)/2-0.1)*dir(60),E,Fill(white));
dot(((r1+r2)/2-0.1)*dir(60));
label("$O$",(0,0),SW);
label("$\rho_2$",(1,0),(0.5,-1));
label("$r_1$",(r1,0),(0.7,-1));
label("$\rho_1$",(4,0),(0.7,-1));
label("$\gamma_1$",(r1+0.36)*dir(110));
draw((0,-5)--(0,5),Arrow(SimpleHead));
draw((-5,0)--(6,0),Arrow(SimpleHead));
label("$\mathop{\mathrm{Im}}z$",(0,4.5),W);
label("$\mathop{\mathrm{Re}}z$",(6,0),S);