



































































































































































































|
|
| Figure 0001: BezierSurface.asy |
import surface; size(400,400); settings.outformat="pdf"; string viewpoint="{-0.5426446795463562 -0.14865268766880035 0.4635830819606781}{0.8478688597679138 -0.43896540999412537 -0.2973680794239044}{1.773653046791941}{22.894760674626774}{}"; //viewpoint=getstring("viewpoint",viewpoint); currentprojection=perspective(viewpoint); triple[][][] P={{ {(-1.6,0,1.875),(-1.6,-0.3,1.875),(-1.5,-0.3,2.1),(-1.5,0,2.1)}, {(-2.3,0,1.875),(-2.3,-0.3,1.875),(-2.5,-0.3,2.1),(-2.5,0,2.1)}, {(-2.7,0,1.875),(-2.7,-0.3,1.875),(-3,-0.3,2.1),(-3,0,2.1)}, {(-2.7,0,1.65),(-2.7,-0.3,1.65),(-3,-0.3,1.65),(-3,0,1.65)} },{ {(-2.7,0,1.65),(-2.7,-0.3,1.65),(-3,-0.3,1.65),(-3,0,1.65)}, {(-2.7,0,1.425),(-2.7,-0.3,1.425),(-3,-0.3,1.2),(-3,0,1.2)}, {(-2.5,0,0.975),(-2.5,-0.3,0.975),(-2.65,-0.3,0.7275),(-2.65,0,0.7275)}, {(-2,0,0.75),(-2,-0.3,0.75),(-1.9,-0.3,0.45),(-1.9,0,0.45)} },{ {(-2.7,0,1.65),(-2.7,0.3,1.65),(-3,0.3,1.65),(-3,0,1.65)}, {(-2.7,0,1.875),(-2.7,0.3,1.875),(-3,0.3,2.1),(-3,0,2.1)}, {(-2.3,0,1.875),(-2.3,0.3,1.875),(-2.5,0.3,2.1),(-2.5,0,2.1)}, {(-1.6,0,1.875),(-1.6,0.3,1.875),(-1.5,0.3,2.1),(-1.5,0,2.1)} },{ {(-2,0,0.75),(-2,0.3,0.75),(-1.9,0.3,0.45),(-1.9,0,0.45)}, {(-2.5,0,0.975),(-2.5,0.3,0.975),(-2.65,0.3,0.7275),(-2.65,0,0.7275)}, {(-2.7,0,1.425),(-2.7,0.3,1.425),(-3,0.3,1.2),(-3,0,1.2)}, {(-2.7,0,1.65),(-2.7,0.3,1.65),(-3,0.3,1.65),(-3,0,1.65)} }}; frame f; for(int i=0; i < P.length; ++i) { for(int j=0; j < P[i].length; ++j) P[i][j] *= 10; // Temporary scaling. draw(f,P[i],blue); } add3(f,"label",10cm,(0,0)); label(cameralink("label"),(1,-2)); /* draw(P[1],1,16); draw(P[3],1,16); draw(P[0],16,1); draw(P[2],16,1); */
|
|
| Figure 0002: Bode.asy |
import graph; texpreamble("\def\Arg{\mathop {\rm Arg}\nolimits}"); size(10cm,5cm,IgnoreAspect); real ampl(real x) {return 2.5/(1+x^2);} real phas(real x) {return -atan(x)/pi;} scale(Log,Log); draw(graph(ampl,0.01,10)); ylimits(0.001,100); xaxis("$\omega\tau_0$",BottomTop,LeftTicks); yaxis("$|G(\omega\tau_0)|$",Left,RightTicks); picture q=secondaryY(new void(picture pic) { scale(pic,Log,Linear); draw(pic,graph(pic,phas,0.01,10),red); ylimits(pic,-1.0,1.5); yaxis(pic,"$\Arg G/\pi$",Right,red, LeftTicks("$% #.1f$", begin=false,end=false)); yequals(pic,1,Dotted); }); label(q,"(1,0)",Scale(q,(1,0)),red); add(q);
|
|
| Figure 0003: CAD1.asy |
import CAD; sCAD cad=sCAD.Create(); // Freehand line draw(g=cad.MakeFreehand(pFrom=(3,-1)*cm,(6,-1)*cm), p=cad.pFreehand); // Standard measurement lines draw(g=box((0,0)*cm,(1,1)*cm),p=cad.pVisibleEdge); cad.MeasureParallel(L="$\sqrt{2}$", pFrom=(0,1)*cm, pTo=(1,0)*cm, dblDistance=-15mm); // Label inside,shifted to the right; arrows outside draw(g=box((2,0)*cm,(3,1)*cm),p=cad.pVisibleEdge); cad.MeasureParallel(L="1", pFrom=(2,1)*cm, pTo=(3,1)*cm, dblDistance=5mm, dblLeft=5mm, dblRelPosition=0.75); // Label and arrows outside draw(g=box((5,0)*cm,(5.5,1)*cm),p=cad.pVisibleEdge); cad.MeasureParallel(L="0.5", pFrom=(5,1)*cm, pTo=(5.5,1)*cm, dblDistance=5mm, dblLeft=10mm, dblRelPosition=-1); // Small bounds,asymmetric measurement line draw(g=box((7,0)*cm,(7.5,1)*cm),p=cad.pVisibleEdge); cad.MeasureParallel(L="0.5", pFrom=(7,1)*cm, pTo=(7.5,1)*cm, dblDistance=5mm, dblLeft=2*cad.GetMeasurementBoundSize(bSmallBound=true), dblRight=10mm, dblRelPosition=2, bSmallBound=true);
|
|
| Figure 0004: CDlabel.asy |
usepackage("babel","german"); size(11.7cm,11.7cm); asy(nativeformat(),"logo"); fill(unitcircle^^(scale(2/11.7)*unitcircle), evenodd+rgb(124/255,205/255,124/255)); label(scale(1.1)*minipage( "\centering\scriptsize \textbf{Nonlinear Modelling, Tutorial and Manual}\\ \textsc{G\"unther H. Mehring}\\ (edited by \textsc{Peter Sch\"opf} and \textsc{Jens Schwaiger})\\ with an \textbf{Appendix} written by\\ \textsc{Wolfgang Prager} and \textsc{Jens Schwaiger}",6cm),(0,0.6)); label(scale(1.1)*minipage("\centering\scriptsize Bericht Nr. 349(2005)\\ {\bfseries Grazer Mathematische Berichte}\\ ISSN 1016--7692",4cm),(0.55,0.2)); label(graphic("logo."+nativeformat(),"height=7cm"),(0,-0.22)); clip(unitcircle^^(scale(2/11.7)*unitcircle),evenodd);
|
|
| Figure 0005: Coons.asy |
size(200); pen[] p={red,green,blue,magenta}; path g=(0,0){dir(45)}..(1,0)..(1,1)..(0,1)..cycle; tensorshade(g,p); dot(g);
|
|
| Figure 0006: GaussianSurface.asy |
import graph3; size(200,0); currentprojection=perspective(5,4,2); real f(pair z) {return 0.5+exp(-abs(z)^2);} draw((-1,-1,0)--(1,-1,0)--(1,1,0)--(-1,1,0)--cycle); draw(arc(0.12Z,0.2,90,60,90,15),ArcArrow); picture surface=surface(f,nsub=4,(-1,-1),(1,1),nx=10,light=O); bbox3 b=limits(O,1.75(1,1,1)); xaxis(Label("$x$",1),b,red,Arrow); yaxis(Label("$y$",1),b,red,Arrow); zaxis(Label("$z$",1),b,red,Arrow); label("$O$",(0,0,0),S,red); add(surface);
|
|
| Figure 0007: Gouraud.asy |
size(200); pen[] p={red,green,blue,magenta}; pair[] z={(-1,0),(0,0),(0,1),(1,0)}; int[] edges={0,0,0,1}; gouraudshade(z[0]--z[2]--z[3]--cycle,p,z,edges); draw(z[0]--z[1]--z[2]--cycle); draw(z[1]--z[3]--z[2],dashed); dot(Label,z[0],W); dot(Label,z[1],S); dot(Label,z[2],N); dot(Label,z[3],E); label("0",z[0]--z[1],S,red); label("1",z[1]--z[2],E,red); label("2",z[2]--z[0],NW,red);
|
|
| Figure 0008: Gouraudcontour.asy |
import graph; import palette; import contour; size(200); int n=100; real[] x=new real[n]; real[] y=new real[n]; real[] f=new real[n]; real F(real a, real b) {return a^2+b^2;} real r() {return 1.1*(rand()/randMax*2-1);} for(int i=0; i < n; ++i) { x[i]=r(); y[i]=r(); f[i]=F(x[i],y[i]); } pen Tickpen=black; pen tickpen=gray+0.5*linewidth(currentpen); pen[] Palette=BWRainbow(); bounds range=image(x,y,f,Range(0,2),Palette); draw(contour(pairs(x,y),f,new real[]{0.25,0.5,1},operator ..)); palette("$f(x,y)$",range,point(NW)+(0,0.5),point(NE)+(0,0.8),Top,Palette, PaletteTicks(Tickpen,tickpen));
|
|
| Figure 0009: HermiteSpline.asy |
import graph; size(140mm,70mm,IgnoreAspect); scale(false); real[] x={1,3,4,5,6}; real[] y={1,5,2,0,4}; marker mark=marker(scale(1mm)*cross(6,false,r=0.35),red,Fill); draw(graph(x,y,Hermite),"Hermite Spline",mark); xaxis("$x$",Bottom,LeftTicks(x)); yaxis("$y$",Left,LeftTicks); attach(legend(),point(NW),40S+30E,UnFill);
|
|
| Figure 0010: Hobbycontrol.asy |
size(200); pair z0=(0,0); pair z1=(0.5,3); pair z2=(2,1); path g=z0..z1..z2; pair d0=dir(g,0); pair d1=dir(g,1); draw(Label("$\omega_0$",1),z0-d0..z0+d0,blue+dashed,Arrow); draw(Label("$\omega_1$",1),z1-d1..z1+1.5d1,blue+dashed,Arrow); draw(z0--interp(z0,z1,1.5),dashed); draw(subpath(g,0,1),blue); draw("$\theta$",arc(z0,0.4,degrees(z1-z0),degrees(d0)),red,Arrow, EndPenMargin); draw("$\phi$",arc(z1,1.05,degrees(z1-z0),degrees(d1)),red,Arrow, EndPenMargin); dot("$z_0$",z0,SW,red); dot("$z_1$",z1,SE,red);
|
|
| Figure 0011: Hobbydir.asy |
size(200); pair z0=(0,0); pair z1=(1,2); pair z2=(2,1); path g=z0..z1..z2; label("$\ell_k$",z0--z1); draw("$\ell_{k+1}$",z1--z2,dashed); draw(z0--interp(z0,z1,1.5),dashed); pair d1=dir(g,1); draw(z1-d1..z1+d1,blue+dashed); draw(g,blue); draw(Label("$\theta_k$",0.4),arc(z1,0.4,degrees(z2-z1),degrees(d1)),blue,Arrow, EndPenMargin); draw("$\phi_k$",arc(z1,0.4,degrees(d1),degrees(z1-z0),CCW),Arrow, EndPenMargin); dot("$z_{k-1}$",z0,red); dot("$z_k$",z1,NW,red); dot("$z_{k+1}$",z2,red);
|
|
| Figure 0012: Klein.asy |
import graph3; size(200,0); currentprojection=perspective(50,-300,30); // From http://local.wasp.uwa.edu.au/~pbourke/surfaces_curves/klein/ triple f(pair t) { real u=t.x; real v=t.y; real r=4*(1-cos(u)/2); real x=6*cos(u)*(1+sin(u)) + (u < pi ? r*cos(u)*cos(v) : r*cos(v+pi)); real y=16*sin(u) + (u < pi ? r*sin(u)*cos(v) : 0); real z=r*sin(v); return (x,y,z); } pen p=rgb(0.2,0.5,0.7); add(surface(f,(0,0),(2pi,2pi),60,60,meshpen=p));
|
|
| Figure 0013: Pythagoras.asy |
size(0,150); import geometry; real a=3; real b=4; real c=hypot(a,b); pair z1=(0,b); pair z2=(a,0); pair z3=(a+b,0); perpendicular(z1,NE,z1--z2,blue); perpendicular(z3,NW,blue); draw(square((0,0),z3)); draw(square(z1,z2)); real d=0.3; pair v=unit(z2-z1); draw(baseline("$a$"),-d*I--z2-d*I,red,Bars,Arrows,PenMargins); draw(baseline("$b$"),z2-d*I--z3-d*I,red,Arrows,Bars,PenMargins); draw("$c$",z3+z2*I-d*v--z2-d*v,red,Arrows,PenMargins); draw("$a$",z3+d--z3+z2*I+d,red,Arrows,Bars,PenMargins); draw("$b$",z3+z2*I+d--z3+z3*I+d,red,Arrows,Bars,PenMargins);
|
|
| Figure 0014: PythagoreanTree.asy |
size(250); real a=3; real b=4; real c=hypot(a,b); transform ta=shift(c,c)*rotate(-aCos(a/c))*scale(a/c)*shift(-c); transform tb=shift(0,c)*rotate(aCos(b/c))*scale(b/c); picture Pythagorean(int n) { picture pic; fill(pic,scale(c)*unitsquare,1/(n+1)*green+n/(n+1)*brown); if(n == 0) return pic; picture branch=Pythagorean(--n); add(pic,ta*branch); add(pic,tb*branch); return pic; } add(Pythagorean(12));
|
|
| Figure 0015: Sierpinski.asy |
size(10cm); // Draw Sierpinski triangle with top vertex A, side s, and depth q. void Sierpinski(pair A, real s, int q, bool top=true) { pair B=A-(1,sqrt(2))*s/2; pair C=B+s; if(top) draw(A--B--C--cycle); draw((A+B)/2--(B+C)/2--(A+C)/2--cycle); if(q > 0) { Sierpinski(A,s/2,q-1,false); Sierpinski((A+B)/2,s/2,q-1,false); Sierpinski((A+C)/2,s/2,q-1,false); } } Sierpinski((0,1),1,5);
|
|
| Figure 0016: _slide0.asy |
picture pic; path zoombox(real h) { return box((-h,-h/2),(min(10,h),min(10,h)/2)); } frame zoom(real h, real next=0) { frame f; draw(f, (0,-100){W}..{E}(0,0), Arrow); clip(f, zoombox(h)); if(next > 0) draw(f, zoombox(next)); return scale(100/h)*f; } add(zoom(100), (0,0)); add(zoom(10), (200,0)); add(zoom(1), (400,0));
|
|
| Figure 0017: _slide1.asy |
size(130,0); pair[] z={(0,0), (0,1), (2,1), (2,0), (1,0)}; draw(z[0]..z[1]..z[2]..z[3]..z[4]..cycle, grey+linewidth(5)); dot(z,linewidth(7));
|
|
| Figure 0018: _slide10.asy |
import graph; size(300,0); typedef real func(real); func f(int n) { real fn(real x) { return n*sin(x/n); } return fn; } func f1=f(1); real y=f1(pi); for (int i=1; i<=5; ++i) draw(graph(f(i),-10,10),red);
|
|
| Figure 0019: _slide11.asy |
import binarytree; binarytree bt=binarytree(1,2,4,nil,5,nil,nil,0,nil,nil,3,6,nil,nil,7); draw(bt);
|
|
| Figure 0020: _slide12.asy |
import graph; size(0,100); frame cardsize(real w=0, real h=0, bool keepAspect=Aspect) { picture pic; pic.size(w,h,keepAspect); real f(real t) {return 1+cos(t);} guide g=polargraph(f,0,2pi,operator ..)--cycle; filldraw(pic,g,pink); xaxis(pic,"$x$"); yaxis(pic,"$y$"); dot(pic,"$(a,0)$",(1,0),N); dot(pic,"$(2a,0)$",(2,0),N+E); frame f=pic.fit(); label(f,"{\tt size("+string(w)+","+string(h)+");}", (0.5(min(f).x+max(f).x),min(f).y), align=S); return f; } add(cardsize(0,50), (0,0)); add(cardsize(0,100), (230,0)); add(cardsize(0,200), (540,0));
|
|
| Figure 0021: _slide13.asy |
size(0,150); path q=(0,0){dir(70)}..{dir(70)}(100,50); pen p=rotate(30)*yscale(0.7)*(lightblue+linewidth(20)); draw(q,p); draw((90,10),p); currentpicture.add(new void(frame f, transform t) { draw(f,box(min(t*q)+min(p),max(t*q)+max(p)), dashed); }); draw(box(min(q),max(q))); frame f; draw(f,box(min(p),max(p))); add(f,min(q)); add(f,max(q)); draw(q);
|
|
| Figure 0022: _slide14.asy |
size(0,100); pen p=fontsize(30pt); frame f; label(f, "$E=mc^2$", p); draw(f, box(min(f),max(f))); shipout(f);
|
|
| Figure 0023: _slide15.asy |
import palette; size(160,0); pen[] p=Rainbow(NColors=11); for (int i=1; i<10; ++i) { draw(scale(i)*unitcircle, p[i]+linewidth(2)); }
|
|
| Figure 0024: _slide16.asy |
import math; int n=8, skip=3; pair r(int k) { return unityroot(n,k); } pen col=blue, col2=purple; guide square=box((1,1),(-1,-1)); guide step(int mult) { guide g; for (int k=0; k<n; ++k) g=g--r(mult*k); g=g--cycle; return g; } guide oct=step(1), star=step(skip); guide wedge(pair z, pair v, real r, real a) { pair w=expi(a/2.0); v=unit(v)*r; return shift(z)*((0,0)--v*w--v*conj(w)--cycle); } filldraw(square, col); filldraw(oct, yellow); // The interior angle of the points of the star. real intang=pi*(1-((real)2skip)/((real)n)); for (int k=0; k<n; ++k) { pair z=midpoint(r(k)--r(k+1)); guide g=wedge(z,-z,1,intang); filldraw(g,col2); } fill(star,yellow); filldraw(star,evenodd+col); size(5inch,0);
|
|
| Figure 0025: _slide2.asy |
size(130,0); pair[] z={(0,0), (0,1), (2,1), (2,0), (1,0)}; path p=z[0]..z[1]..z[2]..z[3]..z[4]..cycle; dot(z); draw(p,lightgrey+linewidth(5)); dot(z); picture output; save(); for (int i=0; i<length(p); ++i) { pair z=point(p,i), dir=dir(p,i); draw((z-0.3dir)--(z+0.3dir), Arrow); } add(output, currentpicture.fit(), (-0.5inch, 0), W); restore(); save(); guide g; for (int i=0; i<length(p); ++i) { dot(precontrol(p,i)); dot(postcontrol(p,i)); g=g--precontrol(p,i)--point(p,i)--postcontrol(p,i); } draw(g--cycle,dashed); add(output, currentpicture.fit(), (+0.5inch, 0), E); restore(); shipout(output);
|
|
| Figure 0026: _slide3.asy |
size(0,200); path star; for (int i=0; i<5; ++i) star=star--dir(90+144i); star=star--cycle; fill(shift(-1,0)*star,orange+zerowinding); draw(shift(-1,0)*star,linewidth(3)); fill(shift(1,0)*star,blue+evenodd); draw(shift(1,0)*star,linewidth(3));
|
|
| Figure 0027: _slide4.asy |
size(0,300); path[] p={scale(2)*unitcircle, reverse(unitcircle)}; fill(p,green+zerowinding);
|
|
| Figure 0028: _slide5.asy |
size(0,200); guide star; for (int i=0; i<5; ++i) star=star--dir(90+144i); star=star--cycle; fill(star,orange+zerowinding); clip(scale(0.7)*unitcircle); draw(scale(0.7)*unitcircle);
|
|
| Figure 0029: _slide6.asy |
size(500,0); real bw=0.15; real sw=0.2; real r=0.15; path outside=(0,0)--(0,1)-- (bw+sw,1)..(bw+sw+r+bw,1-(r+bw))..(bw+sw,1-2(r+bw))-- (bw,1-2(r+bw))--(bw,0)--cycle; path inside=(bw,1-bw-2r)--(bw,1-bw)-- (bw+sw,1-bw)..(bw+sw+r,1-bw-r)..(bw+sw,1-bw-2r)--cycle; //fill(new path[] {outside, reverse(inside)},yellow); path[] P={outside, reverse(inside)}; fill(P,blue); fill(shift(2,0)*reflect((0,0),(0,1))*P, red); fill(shift(4,0)*rotate(30)*P, yellow); fill(shift(6,0)*yscale(0.7)*xscale(2)*P, green);
|
|
| Figure 0030: _slide7.asy |
unitsize(0.65cm);void drawEllipse(real xsize=1, real ysize=xsize, pen p=blue) { draw(xscale(xsize)*yscale(ysize)*unitcircle, p); } drawEllipse(2); drawEllipse(red);
|
|
| Figure 0031: _slide8.asy |
unitsize(0.65cm);void drawEllipse(real xsize=1, real ysize=xsize, pen p=blue) { draw(xscale(xsize)*yscale(ysize)*unitcircle, p); } drawEllipse(xsize=2, ysize=1); drawEllipse(ysize=2, xsize=3, green);
|
|
| Figure 0032: _slide9.asy |
import graph; size(300,0); real f(real x) { return x*sin(10x); } draw(graph(f,-3,3),red);
|
|
| Figure 0033: advection.asy |
size(0,22cm); texpreamble(" \usepackage{bm} \def\v{\bm} \def\grad{\v\nabla} \def\cross{{\v\times}} \def\curl{\grad\cross} \def\del{\nabla} "); defaultpen(fontsize(10pt)); real margin=1.5mm; object IC=draw("initial condition $\v U_0$",box,(0,1), margin,black,FillDraw(palegray)); object Adv0=draw("Lagrangian state $\v U(t)$",ellipse,(1,1), margin,red,FillDraw(palered)); object Adv=draw("Lagrangian prediction $\v U(t+\tau)$",ellipse,(1,0), margin,red,FillDraw(palered)); object AdvD=draw("diffused parcels",ellipse,(1.8,1), margin,red,FillDraw(palered)); object Ur=draw("rearranged $\v \widetilde U$",box,(0,0), margin,orange+gray,FillDraw(paleyellow)); object Ui=draw("interpolated $\v \widetilde U$",box,(1,-1), margin,blue,FillDraw(paleblue)); object Crank=draw("${\cal L}^{-1}(-\tau){\cal L}(\tau)\v \widetilde U$", box,(0.5,-1),margin,blue,FillDraw(paleblue)); object CrankR=draw("${\cal L}^{-1}(-\tau){\cal L}(\tau)\v \widetilde U$", box,(0,-1),margin,orange+gray,FillDraw(paleyellow)); object Urout=draw(minipage("\center{Lagrangian rearranged solution~$\v U_R$}", 100pt),box,(0,-2),margin,orange+gray, FillDraw(paleyellow)); object Diff=draw("$\v D\del^2 \v \widetilde U$",box,(0.75,-1.5), margin,blue,FillDraw(paleblue)); object UIout=draw(minipage("\center{semi-Lagrangian solution~$\v U_I$}",80pt), box,(0.5,-2),margin,FillDraw(palered+paleyellow)); object psi=draw("$\psi=\del^{-2}\omega$",box,(1.6,-1), margin,darkgreen,FillDraw(palegreen)); object vel=draw("$\v v=\v{\hat z} \cross\grad\psi$",box,(1.6,-0.5), margin,darkgreen,FillDraw(palegreen)); add(new void(frame f, transform t) { pair padv=0.5*(point(Adv0,S,t)+point(Adv,N,t)); picture pic; draw(pic,"initialize",point(IC,E,t)--point(Adv0,W,t),RightSide,Arrow, PenMargin); draw(pic,minipage("\flushright{advect: Runge-Kutta}",80pt), point(Adv0,S,t)--point(Adv,N,t),RightSide,red,Arrow,PenMargin); draw(pic,Label("Lagrange $\rightarrow$ Euler",0.45), point(Adv,W,t)--point(Ur,E,t),5LeftSide,orange+gray, Arrow,PenMargin); draw(pic,"Lagrange $\rightarrow$ Euler",point(Adv,S,t)--point(Ui,N,t), RightSide,blue,Arrow,PenMargin); draw(pic,point(Adv,E,t)--(point(AdvD,S,t).x,point(Adv,E,t).y),red, Arrow(Relative(0.7)),PenMargin); draw(pic,minipage("\flushleft{diffuse: multigrid Crank--Nicholson}",80pt), point(Ui,W,t)--point(Crank,E,t),5N,blue,MidArrow,PenMargin); draw(pic,minipage("\flushleft{diffuse: multigrid Crank--Nicholson}",80pt), point(Ur,S,t)--point(CrankR,N,t),LeftSide,orange+gray,Arrow,PenMargin); draw(pic,"output",point(CrankR,S,t)--point(Urout,N,t),RightSide, orange+gray,Arrow,PenMargin); draw(pic,point(Ui,S,t)--point(Diff,N,t),blue,MidArrow,PenMargin); draw(pic,point(Crank,S,t)--point(Diff,N,t),blue,MidArrow,PenMargin); label(pic,"subtract",point(Diff,N,t),12N,blue); draw(pic,Label("Euler $\rightarrow$ Lagrange",0.5), point(Diff,E,t)--(point(AdvD,S,t).x,point(Diff,E,t).y)-- (point(AdvD,S,t).x,point(Adv,E,t).y),RightSide,blue, Arrow(position=1.5),PenMargin); dot(pic,(point(AdvD,S,t).x,point(Adv,E,t).y),red); draw(pic,(point(AdvD,S,t).x,point(Adv,E,t).y)--point(AdvD,S,t),red,Arrow, PenMargin); draw(pic,"output",point(Crank,S,t)--point(UIout,N,t),RightSide,brown,Arrow, PenMargin); draw(pic,Label("$t+\tau\rightarrow t$",0.45), point(AdvD,W,t)--point(Adv0,E,t),2.5LeftSide,red,Arrow,PenMargin); draw(pic,point(psi,N,t)--point(vel,S,t),darkgreen,Arrow,PenMargin); draw(pic,Label("self-advection",5.5),point(vel,N,t)-- arc((point(vel,N,t).x,point(Adv,E,t).y),5,270,90)-- (point(vel,N,t).x,padv.y)-- padv,LeftSide,darkgreen,Arrow,PenMargin); draw(pic,Label("multigrid",0.5,S),point(Ui,E,t)--point(psi,W,t),darkgreen, Arrow,PenMargin); add(f,pic.fit()); });
|
|
| Figure 0034: alignedaxis.asy |
import graph; real Freq=60.0; real margin=5mm; pair exp(pair x) { return exp(x.x)*(cos(x.y)+I*sin(x.y)); } real Merr(real x, real w) { real tau=x/(2*Freq); return 20*log(abs((tau*w+tau/(exp(I*2*pi*Freq*tau)-1))*(I*2*pi*Freq))); } real Aerr(real x, real w) { real tau=x/(2*Freq); return degrees((tau*w+tau/(exp(I*2*pi*Freq*tau)-1))*(I*2*pi*Freq)); } picture pic1; scale(pic1,Log,Linear); real Merr1(real x){return Merr(x,1);} draw(pic1,graph(pic1,Merr1,1e-4,1),black+1.2); ylimits(pic1,-60,20); yaxis(pic1,"magnitude (dB)",LeftRight,RightTicks(new real[] {-60,-40,-20,0,20})); xaxis(pic1,"$f/f_\mathrm{Ny}$",BottomTop,LeftTicks(N=5)); yequals(pic1,0,Dotted); yequals(pic1,-20,Dotted); yequals(pic1,-40,Dotted); xequals(pic1,1e-3,Dotted); xequals(pic1,1e-2,Dotted); xequals(pic1,1e-1,Dotted); size(pic1,100,100,point(pic1,SW),point(pic1,NE)); label(pic1,"$\theta=1$",point(pic1,N),2N); frame f1=pic1.fit(); add(f1); picture pic1p; scale(pic1p,Log,Linear); real Aerr1(real x){return Aerr(x,1);} draw(pic1p,graph(pic1p,Aerr1,1e-4,1),black+1.2); ylimits(pic1p,-5,95); yaxis(pic1p,"phase (deg)",LeftRight,RightTicks(new real[] {0,45,90})); xaxis(pic1p,"$f/f_\mathrm{Ny}$",BottomTop,LeftTicks(N=5)); yequals(pic1p,0,Dotted); yequals(pic1p,45,Dotted); yequals(pic1p,90,Dotted); xequals(pic1p,1e-3,Dotted); xequals(pic1p,1e-2,Dotted); xequals(pic1p,1e-1,Dotted); size(pic1p,100,100,point(pic1p,SW),point(pic1p,NE)); frame f1p=pic1p.fit(); f1p=shift(0,min(f1).y-max(f1p).y-margin)*f1p; add(f1p); picture pic2; scale(pic2,Log,Linear); real Merr2(real x){return Merr(x,0.75);} draw(pic2,graph(pic2,Merr2,1e-4,1),black+1.2); ylimits(pic2,-60,20); yaxis(pic2,"magnitude (dB)",LeftRight,RightTicks(new real[] {-60,-40,-20,0,20})); xaxis(pic2,"$f/f_\mathrm{Ny}$",BottomTop,LeftTicks(N=5)); yequals(pic2,0,Dotted); yequals(pic2,-20,Dotted); yequals(pic2,-40,Dotted); xequals(pic2,1e-3,Dotted); xequals(pic2,1e-2,Dotted); xequals(pic2,1e-1,Dotted); size(pic2,100,100,point(pic2,SW),point(pic2,NE)); label(pic2,"$\theta=0.75$",point(pic2,N),2N); frame f2=pic2.fit(); f2=shift(max(f1).x-min(f2).x+margin)*f2; add(f2); picture pic2p; scale(pic2p,Log,Linear); real Aerr2(real x){return Aerr(x,0.75);} draw(pic2p,graph(pic2p,Aerr2,1e-4,1),black+1.2); ylimits(pic2p,-5,95); yaxis(pic2p,"phase (deg)",LeftRight,RightTicks(new real[] {0,45.1,90})); xaxis(pic2p,"$f/f_\mathrm{Ny}$",BottomTop,LeftTicks(N=5)); yequals(pic2p,0,Dotted); yequals(pic2p,45,Dotted); yequals(pic2p,90,Dotted); xequals(pic2p,1e-3,Dotted); xequals(pic2p,1e-2,Dotted); xequals(pic2p,1e-1,Dotted); size(pic2p,100,100,point(pic2p,SW),point(pic2p,NE)); frame f2p=pic2p.fit(); f2p=shift(max(f1p).x-min(f2p).x+margin,min(f2).y-max(f2p).y-margin)*f2p; add(f2p);
|
|
| Figure 0035: axis3.asy |
import graph3; size(0,200,IgnoreAspect); currentprojection=perspective(5,2,2); defaultpen(overwrite(SuppressQuiet)); scale(Linear,Linear,Log(automax=false)); bbox3 b=autolimits(Z,X+Y+30Z); xaxis("$x$",b,red,RightTicks(2,2)); yaxis("$y$",b,red,RightTicks(2,2)); zaxis("$z$",b,red,RightTicks);
|
|
| Figure 0036: bezier2.asy |
import beziercurve; pair midpoint(pair a, pair b) {return interp(a,b,0.5);} pair m0=midpoint(z0,c0); pair m1=midpoint(c0,c1); pair m2=midpoint(c1,z1); draw(m0--m1--m2,dashed); dot("$m_0$",m0,NW,red); dot("$m_1$",m1,N,red); dot("$m_2$",m2,red); pair m3=midpoint(m0,m1); pair m4=midpoint(m1,m2); pair m5=midpoint(m3,m4); draw(m3--m4,dashed); dot("$m_3$",m3,NW,red); dot("$m_4$",m4,NE,red); dot("$m_5$",m5,N,red);
|
|
| Figure 0037: beziercurve.asy |
size(400); pair z0=(0,0); pair c0=(1,1); pair c1=(2,1); pair z1=(3,0); draw(z0..controls c0 and c1 .. z1,blue); draw(z0--c0--c1--z1,dashed); dot("$z_0$",z0,W,red); dot("$c_0$",c0,NW,red); dot("$c_1$",c1,NE,red); dot("$z_1$",z1,red);
|
|
| Figure 0038: binarytreetest.asy |
import binarytree; picture pic,pic2; binarytree bt=binarytree(1,2,4,nil,5,nil,nil,0,nil,nil,3,6,nil,nil,7); draw(pic,bt); binarytree st=searchtree(10,5,2,1,3,4,7,6,8,9,15,13,12,11,14,17,16,18,19); draw(pic2,st,blue); add(pic.fit(),(0,0),10N); add(pic2.fit(),(0,0),10S);
|
|
| Figure 0039: brokenaxis.asy |
import graph; size(200,150,IgnoreAspect); // Break the x axis at 3; restart at 8: real a=3, b=8; // Break the y axis at 100; restart at 1000: real c=100, d=1000; scale(Broken(a,b),BrokenLog(c,d)); real[] x={1,2,4,6,10}; real[] y=x^4; draw(graph(x,y),red,MarkFill[0]); xaxis("$x$",BottomTop,LeftTicks(Break(a,b))); yaxis("$y$",LeftRight,RightTicks(Break(c,d))); label(rotate(90)*Break,(a,point(S).y)); label(rotate(90)*Break,(a,point(N).y)); label(Break,(point(W).x