🔗Asymptote Gallery for Category “Surveys” #16
đź”—ccw-fig001

Usage of the algorithm "Simple Polygon Orientation".
Show ccw/fig0010.asy on Github.
Generated with Asymptote 3.00-0.
Categories : Surveys | Path Orientation
size(8cm, false); real signedArea(pair [] pt) { // Return the signed area of a simple (NON CROSSED) polygon of vertex "pt" // Retourne l'aire algébrique d'un polygone NON CROISÉ pair [] pt_= copy(pt); real n=pt.length, sa=0; pt_.push(pt_[0]); pt_.push(pt_[1]); for (int i=1; i<=n; ++i) sa +=pt_[i].x * (pt_[i+1].y - pt_[i-1].y); return sa/2; } bool counterclockwise(pair [] pt) { // Return "true" if the polygon (SIMPLE CURVE i.e. NON CROSSED) // of vertex "pt" is counterclockwise // Retourne "true" si le polygone (NON CROISÉ) de sommets "pt" // est dans le sens des aiguilles d'une montre return (signedArea(pt) > 0); } pair [] reverse(pair [] pt) { pair [] pt_=copy(pt); int begin=0, end=pt.length-1; while (begin<end) { pair temp=pt_[begin]; pt_[begin]=pt_[end]; pt_[end]=temp; ++begin; --end; } return pt_; } pair [] counterclockdirected(pair [] pt) { if (counterclockwise(pt)) return pt; else return reverse(pt); } path polygon(pair [] pt) { int l=pt.length; guide opath; for (int i=0; i<l; ++i) { opath = opath--pt[i]; } return opath; } pair [] pg = {(0,0), (1,0), (1,1), (2,2), (-1,1)}; draw(polygon(pg)--cycle, Arrow(Relative(.1)), BeginBar); draw(polygon(counterclockdirected(reverse(pg)))--cycle, Arrow(position=Relative(.2), FillDraw(red)), BeginBar);
đź”—ccw-fig002

Show ccw/fig0020.asy on Github.
Generated with Asymptote 3.00-0.
Categories : Surveys | Path Orientation
size(6cm); bool counterclockwise(path g, int n=10^3) { // Return "true" if "g" (SIMPLE CURVE i.e. NON CROSSED) is counterclockwise // Retounre "true" si "g" (NON CROISÉ) est dans le sens contraire des aiguilles d'une montre if (!cyclic(g) || length(g)==0) abort("The function 'clocksize' needs cyclic path."); pair [] pt; real l=length(g), step=1/n, t=0, sa=0; do { sa +=point(g,t).x * (point(g,t+step).y - point(g,t-step).y); t+=step; } while (t<l); return (sgn(sa) > 0); } path counterclockdirected(path g,int n=10^3) { // Return "g" (SIMPLE CURVE i.e. NON CROSSED) counterclockwise // Retourne "g" (NON CROISÉ) dans le sens des aiguilles d'une montre if (counterclockwise(g,n)) return g; else return reverse(g); } path p=unitcircle; draw(counterclockdirected(reverse(p)), Arrow(Relative(.1)), BeginBar); draw(counterclockdirected(p), Arrow(position=Relative(.2),FillDraw(red)), BeginBar);
đź”—ccw-fig003

Use of the native windingnumber Asymptote routine this is the most fast and robust.
Utilisation du nombre d'enroulement avec la routine native windingnumber d'Asymptote c'est plus rapide et plus robuste.
Explanations are here.
Show ccw/fig0030.asy on Github.
Generated with Asymptote 3.00-0.
Categories : Surveys | Path Orientation
size(6cm,0, false); bool counterclockwise(path g, pair z) {return windingnumber(g,z) > 0;} path counterclockdirected(path g,pair z) { if (counterclockwise(g,z)) return g; else return reverse(g); } pair z=(1,0); dot(z); path p=(0,0){N}..(4,0){N}..cycle; draw(counterclockdirected(reverse(p),z),Arrow(Relative(.1)), BeginBar); draw(counterclockdirected(p,z),Arrow(position=Relative(.2),FillDraw(red)), BeginBar); pair z=(3,-2); dot(z); path p=(4,-2){N}..(0,-2){N}..cycle; draw(counterclockdirected(reverse(p),z),Arrow(Relative(.1)), BeginBar); draw(counterclockdirected(p,z),Arrow(position=Relative(.2),FillDraw(red)), BeginBar); pair z=(1,-4.5); dot(z); path p=yscale(.75)*((0,-6){N}..(2,-6){S}..(0,-6){N}..(4,-6){S}..cycle); draw(counterclockdirected(reverse(p),z),Arrow(Relative(.1)), BeginBar); draw(counterclockdirected(p,z),Arrow(position=Relative(.2),FillDraw(red)), BeginBar); pair z=(3,-8); dot(z); path p=shift((0,-3.5))*p; draw(counterclockdirected(reverse(p),z),Arrow(Relative(.1)), BeginBar); draw(counterclockdirected(p,z),Arrow(position=Relative(.2),FillDraw(red)), BeginBar);
đź”—ccw-fig004

Show ccw/fig0040.asy on Github.
Generated with Asymptote 3.00-0.
Categories : Surveys | Path Orientation
// Use of the windingnumber works also for CROSSED curves size(8cm,10cm,false); import math; bool counterclockwise(path g) { // Return "true" if "g" is counterclockwise // Retounre "true" si "g" est dans le sens contraire des aiguilles d'une montre return (windingnumber(g,inside(g)) > 0); } path counterclockdirected(path g) { if (counterclockwise(g)) return g; else return reverse(g); } guide p=randompath(30)..cycle; draw(counterclockdirected(reverse(p)),Arrow(10bp,Relative(0.025)), BeginBar); draw(counterclockdirected(p),Arrow(10bp,FillDraw(red),Relative(.05)), BeginBar);
đź”—fractales-fig001

Show fractales/fig0010.asy on Github.
Generated with Asymptote 3.00-0.
Categories : Surveys | Fractals
Tags : #Function (creating) | #Fractals | #Recursion | #Transform | #Picture
// From documentation of Asymptote 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));
đź”—fractales-fig002

Show fractales/fig0020.asy on Github.
Generated with Asymptote 3.00-0.
Categories : Surveys | Fractals
Tags : #Fractals | #Recursion | #Transform | #Function (creating)
size(10cm,0); transform scale(pair center, real k) { return shift(center)*scale(k)*shift(-center); } path trk=(0,0)--(0,1); void tree(path p, int n, real a=30, real b=40, real r=.75) { if (n!=0) { pair h=point(p,length(p)); transform tb=rotate(180-b,h)*scale(h,r); transform ta=rotate(-180+a,h)*scale(h,r); draw(p,n/3+1/(n+1)*green+n/(n+1)*brown); tree(tb*reverse(p),n-1,a,b,r); tree(ta*reverse(p),n-1,a,b,r); } } tree(trk,12,a=25,b=40,r=.75);
đź”—fractales-fig003

Show fractales/fig0030.asy on Github.
Generated with Asymptote 3.00-0.
Categories : Surveys | Fractals
Tags : #Fractals | #Recursion | #Transform | #Picture | #Function (creating)
// Barnsley's fern // Fougère de Barnsley size(5cm,0); real ab=85, ac=-5; real rc=.85, rb=-.31; path trk=(0,0)--(0,1); transform ta=shift(0,1)*rotate(ab)*scale(rb); transform tb=shift(0,1)*rotate(-ab)*scale(rb); transform tc=shift(0,1)*rotate(ac)*scale(rc); picture fern(int n) { picture opic; draw(opic,trk^^ta*trk^^tb*trk^^tc*trk); if (n==0) return opic; picture branch=fern(n-1); add(opic,branch); add(opic,ta*branch); add(opic,tb*branch); add(opic,tc*branch); return opic; } add(fern(6));
đź”—fractales-fig004

Show fractales/fig0040.asy on Github.
Generated with Asymptote 3.00-0.
Categories : Surveys | Fractals
Tags : #Fractals | #Transform | #Picture
// Barnsley's fern // Fougère de Barnsley size(10cm,0); real ab=72, ac=-7; real rc=0.85, rb=0.35; path trk=(0,0)--(0,1); transform ta=shift(0,1)*rotate(ab)*scale(rb); transform tb=shift(0,1)*rotate(-ab)*scale(rb); transform tc=shift(0,1)*rotate(ac)*scale(rc); transform td=shift(0,1)*rotate((ab+ac)/2)*scale(rb); transform te=shift(0,1)*rotate(-(ab+ac)/2)*scale(rb); picture pic; draw(pic,trk,red+.8green); //Construct a fern branch as atractor int nbit=7; for(int i=1; i<=nbit; ++i) { picture pict; add(pict,ta*pic); add(pict,tb*pic); add(pict,tc*pic); draw(pict,(0,0)--(0,1), (2*(i/nbit)^2)*bp+((1-i/nbit)*green+i/nbit*brown)); pic=pict; } //Use the fern branch to construct... a fern branch picture pict; add(pict,ta*pic); add(pict,tb*pic); pair x=(0,1); nbit=23; for(int i=1; i<=nbit; ++i) { add(shift(x)*rotate(ac*i)*scale(rc^i)*pict); draw(tc^i*((0,0)--(0,1)), 2*(1.5-i/nbit)^2*bp+brown); x=tc*x; } shipout(bbox(3mm, 2mm+black, FillDraw(paleyellow)));
đź”—fractales-fig005

Show fractales/fig0050.asy on Github.
Generated with Asymptote 3.00-0.
Categories : Surveys | Fractals
Tags : #Fractals | #Transform | #Picture
// Barnsley's fern // Fougère de Barnsley size(5cm,0); real ab=85, ac=-5; real rc=0.8, rb=0.3; path trk=(0,0)--(0,1); transform [] t; t[1] =shift(0,1)*rotate(ab)*scale(rb); t[2] =shift(0,1)*rotate(-ab)*scale(rb); t[3] =shift(0,1)*rotate(ac)*scale(rc); real sum=0; for(int i=0; i<100; ++i) sum+=(rc*cos(ac*pi/180))^i; t[4] =xscale(0.01)*yscale(1/sum); picture pic; draw(pic,trk); pair pt=(0,0); for(int i=0; i < 1000; ++i) { pt=t[ 1+floor((3.0*rand()/randMax)) ]*pt; } int nbt; for(int i=0; i < 200000; ++i) { nbt=1+floor((4.0*rand()/randMax)); pt=t[nbt]*pt; draw(pt); }
đź”—fractales-fig006

Show fractales/fig0060.asy on Github.
Generated with Asymptote 3.00-0.
Categories : Surveys | Fractals
Tags : #Fractals | #Recursion | #Random | #Function (creating)
//From documentation of Asymptote 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, bool randcolor=false) { pair B=A-(1,sqrt(2))*s/2; pair C=B+s; if(top) draw(A--B--C--cycle); if (randcolor) { filldraw((A+B)/2--(B+C)/2--(A+C)/2--cycle, (.33*rand()/randMax*red+.33*rand()/randMax*green+.33*rand()/randMax*blue)); } else draw((A+B)/2--(B+C)/2--(A+C)/2--cycle); if(q > 0) { Sierpinski(A,s/2,q-1,false,randcolor); Sierpinski((A+B)/2,s/2,q-1,false,randcolor); Sierpinski((A+C)/2,s/2,q-1,false,randcolor); } } Sierpinski((0,1), 1, 5, randcolor=true);
đź”—fractales-fig007

Translate from http://zoonek.free.fr/LaTeX/Metapost/metapost.html
Show fractales/fig0070.asy on Github.
Generated with Asymptote 3.00-0.
Categories : Surveys | Fractals
Tags : #Fractals | #Recursion
size(8cm); void koch(pair A, pair B, int n) { pair C; C =rotate(120, point(A--B,1/3))*A; if (n>0) { koch( A, point(A--B,1/3), n-1); koch( point(A--B,1/3), C, n-1); koch( C, point(A--B,2/3), n-1); koch( point(A--B,2/3), B, n-1); } else draw(A--point(A--B,1/3)--C--point(A--B,2/3)--B); } pair z0=(1,0); pair z1=rotate(120)*z0; pair z2=rotate(120)*z1; koch( z0, z1, 3 ); koch( z1, z2, 3 ); koch( z2, z0, 3 );
đź”—fractales-fig008

Show fractales/fig0080.asy on Github.
Generated with Asymptote 3.00-0.
Categories : Surveys | Fractals
Tags : #Fractals | #Loop/for/while | #Picture
size(10cm,0); real mandelbrot(pair c, real r, int count=100) { int i=0; pair z=c; do { ++i; z=z^2+c; } while (length(z) <= r && i<count); return (i<count) ? i/count : 0; } real r=4; real step=.01; real xmin=-2.25, xmax=.75; real ymin=-1.3, ymax=0; real x=xmin, y=ymin; int xloop=round((xmax-xmin)/step); int yloop=round((ymax-ymin)/step); pen p; path sq=scale(step)*unitsquare; for(int i=0; i < xloop; ++i) { for(int j=0; j < yloop; ++j) { p=mandelbrot((x,y),r,20)*red; filldraw(shift(x,y)*sq,p,p); y += step; } x += step; y=ymin; } add(reflect((0,0),(1,0))*currentpicture);
đź”—fractales-fig009

Show fractales/fig0090.asy on Github.
Generated with Asymptote 3.00-0.
Categories : Surveys | Fractals
Tags : #Fractals | #Recursion | #Transform | #Picture | #Array
size(10cm,0); real a=-1.5, b=2a/3; picture H(pen p=currentpen) { picture H; draw(H,(-a,0)--(a,0)^^(-a,-b)--(-a,b)^^(a,-b)--(a,b),p); return H; } transform sc=scale(0.5); transform[] t={identity(), shift(-a,b)*sc, shift(-a,-b)*sc, shift(a,b)*sc, shift(a,-b)*sc}; picture Hfractal(int n, pen p=currentpen) { picture pic; if(n == 0) return H(p); picture Ht=Hfractal(n-1,p); for (int i=0; i < 5; ++i) add(pic,t[i]*Ht); return pic; } add(Hfractal(4, bp+0.5*red));
đź”—fractales-fig010

Show fractales/fig0100.asy on Github.
Generated with Asymptote 3.00-0.
Categories : Surveys | Fractals
Tags : #Fractals | #Recursion | #Transform | #Picture | #Array
size(10cm,0); real a=-1.5, b=2a/3; path[] H=(-a,0)--(a,0)^^(-a,-b)--(-a,b)^^(a,-b)--(a,b); transform sc=scale(0.5); transform[] t={shift(-a,b)*sc, shift(-a,-b)*sc, shift(a,b)*sc, shift(a,-b)*sc}; void Hfractal(path[] g, int n, pen[] p=new pen[]{currentpen}) { p.cyclic=true; if(n == 0) draw(H,p[0]); else { for (int i=0; i < 4; ++i) { draw(t[i]*g,p[n]); Hfractal(t[i]*g,n-1,p); } } } Hfractal(H, 5, new pen[] {0.8*red, 0.8*green, 0.8*blue, black, blue+red});
đź”—fractales-fig011

Show fractales/fig0110.asy on Github.
Generated with Asymptote 3.00-0.
Categories : Surveys | Fractals
Tags : #Fractals | #Recursion | #Geometry | #Triangle | #Array | #Loop/for/while
import geometry; size(10cm,0); triangle[] dissect(triangle T, int n) { if(n <= 0) return new triangle[]{T}; triangle[] OT; point M=midpoint(T.BC); triangle[] Tp=dissect(triangle(M,T.A,T.B),n-1); for(triangle t : Tp) OT.insert(0,t); triangle[] Tp=dissect(triangle(M,T.C,T.A),n-1); for(triangle t : Tp) OT.insert(0,t); return OT; } triangle T=rotate(45)*triangle((1,1),(0,0),(2,0)); triangle[] DT=dissect(T,9); path g; transform R=reflect(T.BC); for(int i : DT.keys) { draw(DT[i],miterjoin+0.9*red); draw(R*DT[i],miterjoin+0.9*red); g=g--centroid(DT[i]); } draw(scale(sqrt(2))*unitsquare,bp+miterjoin+0.8*blue); draw(g--reverse(R*g)--cycle,bp+miterjoin+yellow); shipout(bbox(sqrt(2)*mm, Fill(black)));
đź”—fractales-fig012

Show fractales/fig0120.asy on Github.
Generated with Asymptote 3.00-0.
Categories : Surveys | Fractals
Tags : #Fractals | #Recursion | #Geometry | #Triangle | #Array | #Loop/for/while
size(12cm,0); import geometry; triangle T=triangleAbc(90,Tan(30),1); triangle[] reverse(triangle[] arr) { triangle[] or; int l=arr.length; for(int i=0; i < l; ++i) { or.push(arr[l-i-1]); } return or; } triangle[] dissect(triangle T, int n, bool reverse=false) { if(n <= 0) return new triangle[]{T}; triangle[] OT; point M=curpoint(T.AB,T.b()*Tan(30)); point H=projection(T.BC)*M; triangle[] OT1, OT2, OT3; OT.append(dissect(triangle(H,T.B,M),n-1,!reverse)); OT.append(reverse((dissect(triangle(H,T.C,M),n-1,!reverse)))); OT.append(dissect(triangle(T.A,T.C,M),n-1,!reverse)); return OT; } triangle[] DT=dissect(T,5); point O=centroid(DT[0]); path g; transform Ro=rotate(30,T.B), Re=reflect(T.BC), Roj; for(int i : DT.keys) { O=incenter(DT[i]); g=g--O; } g=reverse(g); path G, g=g--Re*reverse(g) ; for (int j=0; j < 12; j += 2) G=G--Ro^(-j)*g; fill(G--cycle,0.3*blue); for(int i : DT.keys) { for (int j=0; j < 12; j += 2) { Roj=Ro^j; draw(Roj*DT[i],miterjoin+0.8*red); draw(Roj*(Re*DT[i]),miterjoin+0.8*red); } } draw(G--cycle,bp+miterjoin+0.9*yellow); shipout(bbox(2mm, FillDraw(black, 1mm+miterjoin+deepblue)));
đź”—lsystem-fig001

Show lsystem/fig0010.asy on Github.
Generated with Asymptote 3.00-0.
Categories : Surveys | L-System
Tags : #L-System | #Fractals
import Lsystem; size(10cm); string[][] rules={{"F","FF"}, {"X","--FXF++FXF++FXF--"}}; Lsystem Sierpinski=Lsystem("FXF--FF--FF", rules, La=60, Lai=0); Sierpinski.iterate(5); draw(Sierpinski.paths(), bp+0.2*green); shipout(bbox(Fill(paleyellow)));
đź”—lsystem-fig002

Show lsystem/fig0020.asy on Github.
Generated with Asymptote 3.00-0.
Categories : Surveys | L-System
Tags : #L-System | #Fractals
import Lsystem; size(15cm,0); Lsystem SierpinskiCurve= Lsystem("YF", new string[][]{{"X","YF+XF+Y"},{"Y","XF-YF-X"}}, La=60, Lai=0); SierpinskiCurve.iterate(7); draw(SierpinskiCurve.paths(), bp+0.2*green); shipout(bbox(Fill(paleyellow)));
đź”—lsystem-fig003

Show lsystem/fig0030.asy on Github.
Generated with Asymptote 3.00-0.
Categories : Surveys | L-System
Tags : #L-System | #Fractals
import Lsystem; size(15cm,0); Lsystem SierpinskiCarpet= Lsystem("F+F+F+F", new string[][]{{"F","FF+F+F+F+FF"}}, La=90, Lai=0); SierpinskiCarpet.iterate(4); draw(SierpinskiCarpet.paths(), bp+0.2*green); shipout(bbox(Fill(paleyellow)));
đź”—lsystem-fig004

Source
Show lsystem/fig0040.asy on Github.
Generated with Asymptote 3.00-0.
Categories : Surveys | L-System
Tags : #L-System | #Fractals
import Lsystem; size(15cm,0); Lsystem Koch=Lsystem("+F--F--F", new string[][]{{"F","F+F--F+F"}}, La=60, Lai=0); Koch.iterate(4); filldraw(Koch.paths()[0]&cycle, paleyellow, 1bp+black); shipout(bbox(2mm, Fill(lightyellow)));
đź”—lsystem-fig005

Show lsystem/fig0050.asy on Github.
Generated with Asymptote 3.00-0.
Categories : Surveys | L-System
Tags : #L-System | #Fractals
import Lsystem; size(15cm,0); Lsystem Koch=Lsystem("+F+F+F+F+F", new string[][]{{"F","F-F++F-F"}}, La=72); Koch.iterate(4); filldraw(Koch.paths()[0]&cycle, paleyellow, 1bp+black); shipout(bbox(2mm, Fill(lightyellow)));
đź”—lsystem-fig006

Show lsystem/fig0060.asy on Github.
Generated with Asymptote 3.00-0.
Categories : Surveys | L-System
Tags : #L-System | #Fractals
import Lsystem; size(10cm,0); Lsystem Koch=Lsystem("-F--F--F", new string[][]{{"F","F-F++F-F"}}, La=60); Koch.iterate(4); filldraw(Koch.paths()[0]&cycle, paleyellow, 1bp+black); shipout(bbox(2mm, Fill(lightyellow)));
đź”—lsystem-fig007

Show lsystem/fig0070.asy on Github.
Generated with Asymptote 3.00-0.
Categories : Surveys | L-System
Tags : #L-System | #Fractals
// Quadratic Koch Island import Lsystem; size(10cm,0); string[][] rules={{"F","F-F+F+FFF-F-F+F"}}; Lsystem QuadraticKochIsland=Lsystem("F+F+F+F", rules, La=90, Lai=0); QuadraticKochIsland.iterate(3); draw(QuadraticKochIsland.paths(), bp+0.9*yellow); shipout(bbox(3mm, Fill(black)));
đź”—lsystem-fig008

Source.
Show lsystem/fig0080.asy on Github.
Generated with Asymptote 3.00-0.
Categories : Surveys | L-System
Tags : #L-System | #Fractals
import Lsystem; size(10cm,0); Lsystem HilbertCurve=Lsystem("X", new string[][]{{"X","-YF+XFX+FY-"},{"Y","+XF-YFY-FX+"}}, La=90, Lai=0); HilbertCurve.iterate(6); draw(HilbertCurve.paths(), linewidth(1bp)); shipout(bbox(Fill(lightgrey)));
đź”—lsystem-fig009

Show lsystem/fig0090.asy on Github.
Generated with Asymptote 3.00-0.
Categories : Surveys | L-System
Tags : #L-System | #Fractals
import Lsystem; size(10cm,0); Lsystem Fass=Lsystem("-L", new string[][]{{"L","LFLF+RFR+FLFL-FRF-LFL-FR+F+RF-LFL-FRFRFR+"}, {"R","-LFLFLF+RFR+FL-F-LF+RFR+FLF+RFRF-LFL-FRFR"}}, La=90); Fass.iterate(3); draw(Fass.paths(), linewidth(1bp)); shipout(bbox(Fill(lightgrey)));
đź”—lsystem-fig010

Show lsystem/fig0100.asy on Github.
Generated with Asymptote 3.00-0.
Categories : Surveys | L-System
Tags : #L-System | #Fractals
import Lsystem; size(10cm,0); currentprojection=currentprojection=orthographic((10,5,6)); string[][] rules={{"X","^<XF^<XFX-F^>>XFX&F+>>XFX-F>X->"}}; Lsystem3 HilbertCurve3D=Lsystem3("X", rules, La=90); HilbertCurve3D.iterate(3); // !! Use a lot of memory !! /* path3[] g=HilbertCurve3D.paths3(); draw(g[0], linewidth(bp)+0.9*yellow); */ HilbertCurve3D.drawpaths3(linewidth(bp)+0.9*yellow); shipout(bbox(3mm, Fill(black)));
đź”—lsystem-fig011

Show lsystem/fig0110.asy on Github.
Generated with Asymptote 3.00-0.
Categories : Surveys | L-System
Tags : #L-System | #Fractals
import Lsystem; size(15cm,0); string[][] rules={{"F","FF"}, {"H","+F+FH++FFH++F+FF+FH++FFH++F+F-"}}; Lsystem H=Lsystem("+H",rules, La=90); H.iterate(5); draw(H.paths(), white); shipout(bbox(3mm, Fill(black)));
đź”—lsystem-fig012

Source.
Show lsystem/fig0120.asy on Github.
Generated with Asymptote 3.00-0.
Categories : Surveys | L-System
Tags : #L-System | #Fractals
import Lsystem; size(10cm,0); string[][] rules=new string[][]{{"F",""},{"X","-FX++FY-"},{"Y","+FX--FY+"}}; Lsystem dragon=Lsystem("X",rules, La=45, Lai=0); dragon.iterate(12); draw(dragon.paths(), white); shipout(bbox(3mm, Fill(black)));
đź”—lsystem-fig013

Show lsystem/fig0130.asy on Github.
Generated with Asymptote 3.00-0.
Categories : Surveys | L-System
Tags : #L-System | #Fractals
import Lsystem; size(12cm,0); string[][] rules={{"F","-F+F-F-F+F+FF-F+F+FF+F-F-FF+FF-FF+F+F-FF-F-F+FF-F-F+F+F-F+"}}; Lsystem segment32Curve= Lsystem("F+F+F+F", rules, La=90, Lai=45); segment32Curve.iterate(2); filldraw(segment32Curve.paths()[0]&cycle, 0.8*yellow, blue); shipout(bbox(3mm, Fill(black)));
đź”—lsystem-fig014

Show lsystem/fig0140.asy on Github.
Generated with Asymptote 3.00-0.
Categories : Surveys | L-System
Tags : #L-System | #Fractals
// Peano Gosper curve import Lsystem; size(12cm,0); Lsystem PeanoGosperCurve= Lsystem("FX", new string[][]{{"X","X+YF++YF-FX--FXFX-YF+"},{"Y","-FX+YFYF++YF+FX--FX-Y"}}, La=60, Lai=0); PeanoGosperCurve.iterate(4); draw(PeanoGosperCurve.paths(), bp+0.9*yellow); shipout(bbox(3mm, Fill(black)));
đź”—lsystem-fig015

Show lsystem/fig0150.asy on Github.
Generated with Asymptote 3.00-0.
Categories : Surveys | L-System
Tags : #L-System | #Fractals
import Lsystem; size(12cm,0); string[][] rules={{"X","XF-F+F-XF+F+XF-F+F-X"}}; Lsystem squareCurve= Lsystem("F+XF+F+XF", rules, La=90, Lai=45); squareCurve.iterate(5); filldraw(squareCurve.paths()[0]&cycle, grey, 1bp+0.9*yellow); shipout(bbox(3mm, Fill(black)));
đź”—lsystem-fig016

Show lsystem/fig0160.asy on Github.
Generated with Asymptote 3.00-0.
Categories : Surveys | L-System
Tags : #L-System | #Fractals
import Lsystem; size(12cm,0); string[][] rules={{"L","+R-F-R+"}, {"R","-L+F+L-"}}; Lsystem squareCurve= Lsystem("L--F--L--F", rules, La=45, Lai=45); squareCurve.iterate(9); filldraw(squareCurve.paths()[0]&cycle, grey, 1bp+0.9*yellow); shipout(bbox(3mm, Fill(black)));
đź”—lsystem-fig017

Show lsystem/fig0170.asy on Github.
Generated with Asymptote 3.00-0.
Categories : Surveys | L-System
Tags : #L-System | #Fractals
import Lsystem; size(10cm,0); string[][] rules={ {"F", "F+f-FF+F+FF+Ff+FF-f+FF-F-FF-Ff-FFF"}, {"f", "ffffff"} }; Lsystem oer=Lsystem("F+F+F+F",rules,La=91); oer.iterate(2); draw(oer.paths(), bp+0.8*yellow); shipout(bbox(2mm, Fill(black)));
đź”—lsystem-fig018

Show lsystem/fig0180.asy on Github.
Generated with Asymptote 3.00-0.
Categories : Surveys | L-System
Tags : #L-System | #Fractals
import Lsystem; size(15cm,0); string[][] rules={ {"F", ""}, {"P", "--FR++++FS--FU"}, {"Q", "FT++FR----FS++"}, {"R", "++FP----FQ++FT"}, {"S", "FU--FP++++FQ--"}, {"T", "+FU--FP+"}, {"U", "-FQ++FT-"} }; Lsystem pentive=Lsystem("Q", rules, La=36, Lai=180); pentive.iterate(8); draw(pentive.paths(), 0.8*yellow); shipout(bbox(2mm, Fill(black)));
đź”—lsystem-fig019

Show lsystem/fig0190.asy on Github.
Generated with Asymptote 3.00-0.
Categories : Surveys | L-System
Tags : #L-System | #Fractals
import Lsystem; size(12cm,0); string[][] rules={ {"A", "X+X+X+X+X+X+"}, {"X", "[F+F+F+F[---X-Y]+++++F++++++++F-F-F-F]"}, {"Y", "[F+F+F+F[---Y]+++++F++++++++F-F-F-F]"} }; Lsystem spiral=Lsystem("AAAA",rules,La=15); spiral.iterate(6); draw(spiral.paths(), 0.9*green); shipout(bbox(2mm, Fill(black)));
đź”—lsystem-fig020

Rhombus tiling (P3)).
Show lsystem/fig0200.asy on Github.
Generated with Asymptote 3.00-0.
Categories : Surveys | L-System
Tags : #L-System | #Tiling
import Lsystem; size(12cm,0); string[][] rules={ {"6","8F++9F----7F[-8F----6F]++"}, {"7","+8F--9F[---6F--7F]+"}, {"8","-6F++7F[+++8F++9F]-"}, {"9","--8F++++6F[+9F++++7F]--7F"}, {"F",""} }; Lsystem Penrose=Lsystem("[7]++[7]++[7]++[7]++[7]", rules, La=36); Penrose.iterate(4); draw(Penrose.paths(), linewidth(bp)); shipout(bbox(2mm, FillDraw(lightyellow,linewidth(1mm))));
đź”—lsystem-fig021

Penrose tiling
Show lsystem/fig0210.asy on Github.
Generated with Asymptote 3.00-0.
Categories : Surveys | L-System
Tags : #L-System | #Tiling
import Lsystem; size(12cm,0); string[][] rules={ {"W", "YF++ZF----XF[-YF----WF]++"}, {"X", "+YF--ZF[---WF--XF]+"}, {"Y", "-WF++XF[+++YF++ZF]-"}, {"Z", "--YF++++WF[+ZF++++XF]--XF"}, {"F", ""} }; Lsystem Penrose=Lsystem("++ZF----XF-YF----WF",rules,La=36); Penrose.iterate(4); draw(Penrose.paths(), linewidth(bp)); shipout(bbox(2mm, FillDraw(lightyellow,linewidth(1mm))));
đź”—lsystem-fig022

Show lsystem/fig0220.asy on Github.
Generated with Asymptote 3.00-0.
Categories : Surveys | L-System
Tags : #L-System | #Tiling
import Lsystem; size(12cm,0); string[][] rules={ {"W", "YF++ZF----XF[-YF----WF]++"}, {"X", "+YF--ZF[---WF--XF]+"}, {"Y", "-WF++XF[+++YF++ZF]-"}, {"Z", "--YF++++WF[+ZF++++XF]--XF"}, {"F", ""} }; Lsystem Penrose=Lsystem("[X][Y]++[X][Y]++[X][Y]++[X][Y]++[X][Y]",rules,La=36); Penrose.iterate(3); draw(Penrose.paths(), linewidth(bp)); shipout(bbox(2mm, FillDraw(lightyellow,linewidth(1mm))));
đź”—lsystem-fig023

Inspiration.
Show lsystem/fig0230.asy on Github.
Generated with Asymptote 3.00-0.
Categories : Surveys | L-System
Tags : #L-System | #Fractals
import Lsystem; size(10cm, 10cm); settings.outformat="pdf"; // for opacity string[][] rules=new string[][]{{"F", "FF-[-F+F+F]+[+F-F-F]"}}; Lsystem plant=Lsystem("F", rules, La=22.5, Lai=90); plant.iterate(5); path[] g=plant.paths(); tree g=plant.tree(); for (int i:g.keys) { if((g[i].depth == 0)) draw(g[i].g, yellow); } for (int i:g.keys) { if((g[i].depth > 0 )) draw(g[i].g, green+opacity(0.5)); } for (int i:g.keys) { if((g[i].depth > 15)) draw(g[i].g, brown+opacity(0.3)); } shipout(bbox(Fill(paleyellow)));
đź”—lsystem-fig024

Inspirtaion.
Show lsystem/fig0240.asy on Github.
Generated with Asymptote 3.00-0.
Categories : Surveys | L-System
Tags : #L-System | #Fractals
import Lsystem; size(10cm,10cm); settings.outformat="pdf"; // for opacity string[][] rules=new string[][]{{"F", "FF"},{"X", "F-[[X]+X]+F[+FX]-X"}}; Lsystem plant=Lsystem("X", rules, La=22.5, Lai=90); plant.iterate(8); path[] g=plant.paths(); tree g=plant.tree(); for (int i:g.keys) { if((g[i].depth <= 2 )) draw(g[i].g, yellow); } for (int i:g.keys) { if((g[i].depth > 2 ) && (g[i].depth <= 10 )) draw(g[i].g, green+opacity(0.5)); } for (int i:g.keys) { if((g[i].depth > 11)) draw(g[i].g, brown+opacity(0.3)); } shipout(bbox(Fill(paleyellow)));
đź”—randomwalk-fig001

Show randomwalk/fig0010.asy on Github.
Generated with Asymptote 3.00-0.
Categories : Surveys | Random Walk (3D)
Tags : #Random | #Function (creating) | #Array | #Loop/for/while
import three; settings.render=0; // The available directions of steps triple[] dirs={X,-X,Y,-Y,Z,-Z}; dirs.cyclic=true; // Return the nodes of the path triple[] randWalk(real Srnd(), int n) { triple[] randPath; triple camera=1e10*currentprojection.camera; triple pos=O, tpos; int R; for (int i=0; i < n; ++i) { R=round(Srnd()); tpos=pos+dirs[R]; randPath.push(tpos); pos=tpos; } return randPath; } triple[] randWalk(int Srnd(), int n) { real R(){ return Srnd();} return randWalk(R,n); } void drawWalk(triple[] nodes, pen p=white) { triple camera=currentprojection.camera; if(currentprojection.infinity) camera *= max(abs(minbound(nodes)),abs(maxbound(nodes))); real[][] depth; for(int i=0; i < nodes.length-1; ++i) { real d=abs(camera-0.5*(nodes[i]+nodes[i+1])); depth.push(new real[] {d,i}); } depth=sort(depth); triple M=nodes[round(depth[0][1])]; triple m=nodes[round(depth[depth.length-1][1]+1)]; // Draw from farthest to nearest while(depth.length > 0) { real[] a=depth.pop(); int i=round(a[1]); draw(nodes[i]--nodes[i+1],abs(nodes[i]-m)/abs(M-m)*p); } } size(18cm); currentprojection=orthographic((1,1,1)); drawWalk(randWalk(rand,50000),cyan); shipout(bbox(3mm,Fill));
đź”—randomwalk-fig002

Show randomwalk/fig0020.asy on Github.
Generated with Asymptote 3.00-0.
Categories : Surveys | Random Walk (3D)
Tags : #Random | #Struct
import three; settings.render=0; // The available directions of steps triple[] dirs={X,-X,Y,-Y,Z,-Z}; dirs.cyclic=true; struct walk { triple[] nodes; pen[] p; } // Comput the nodes of the path walk randWalk(real Srnd(), int n, pen[] p={currentpen}) { p.cyclic=true; walk ow; triple pos=O, tpos; for (int i=0; i < n; ++i) { int R=round(Srnd()); tpos=pos+dirs[R]; ow.nodes.push(tpos); ow.p.push(p[R]); pos=tpos; } return ow; } walk randWalk(int Srnd(), int n, pen[] p={currentpen}) { real R(){ return Srnd();} return randWalk(R,n,p); } void drawWalk(walk walk) { triple camera=currentprojection.camera; if(currentprojection.infinity) camera *= max(abs(minbound(walk.nodes)),abs(maxbound(walk.nodes))); real[][] depth; for(int i=0; i < walk.nodes.length-1; ++i) { real d=abs(camera-0.5*(walk.nodes[i]+walk.nodes[i+1])); depth.push(new real[] {d,i}); } depth=sort(depth); triple M=walk.nodes[round(depth[0][1])]; triple m=walk.nodes[round(depth[depth.length-1][1]+1)]; // Draw from farthest to nearest while(depth.length > 0) { real[] a=depth.pop(); int i=round(a[1]); // dot(walk.nodes[i],walk.p[i]); draw(walk.nodes[i]--walk.nodes[i+1],abs(walk.nodes[i]-m)/abs(M-m)*(walk.p[i]+walk.p[i+1])); } } size(18cm); currentprojection=orthographic((0.5,0.5,1)); drawWalk(randWalk(rand,50000,new pen[]{red, blue, green, yellow, purple})); shipout(bbox(3mm,Fill));
đź”—randomwalk-fig003

Show randomwalk/fig0030.asy on Github.
Generated with Asymptote 3.00-0.
Categories : Surveys | Random Walk (3D)
Tags : #Random
import three; import stats; settings.render=0; string[] dirs={"U","D","B","F","R","L"}; // U=up, D=down, B=backward, F=forward, R=right, L=left dirs.cyclic=true; // Comput the nodes of the path triple[] randWalk(real Srnd(), int n, real angle=90) { triple[] randPath; triple udir=Z, vdir=X, kdir=cross(udir,vdir); triple pos=O, tpos; void changedir(real angle, triple axe) { transform3 T=rotate(angle,axe); udir=T*udir; vdir=T*vdir; kdir=T*kdir; } void nextdir() { string R=dirs[round(Srnd())]; if(R == "R") changedir(-angle,kdir); else if(R == "L") changedir(angle,kdir); else if(R == "U") changedir(angle,vdir); else if(R == "D") changedir(-angle,vdir); else if(R == "B") changedir(180,udir); } for (int i=0; i < n; ++i) { tpos=pos+udir; randPath.push(tpos); pos=tpos; nextdir(); } return randPath; } triple[] randWalk(int Srnd(), int n, real angle=90) { real R(){ return Srnd();} return randWalk(R,n,angle); } void drawWalk(triple[] nodes, pen p=white) { triple camera=currentprojection.camera; if(currentprojection.infinity) camera *= max(abs(minbound(nodes)),abs(maxbound(nodes))); real[][] depth; for(int i=0; i < nodes.length-1; ++i) { real d=abs(camera-0.5*(nodes[i]+nodes[i+1])); depth.push(new real[] {d,i}); } depth=sort(depth); triple M=nodes[round(depth[0][1])]; triple m=nodes[round(depth[depth.length-1][1]+1)]; // Draw from farthest to nearest while(depth.length > 0) { real[] a=depth.pop(); int i=round(a[1]); draw(nodes[i]--nodes[i+1],abs(nodes[i]-M)/abs(M-m)*p); } } size(18cm); currentprojection=orthographic((0.5,0.5,1)); drawWalk(randWalk(Gaussrand,50000));
đź”—randomwalk-fig004

Show randomwalk/fig0040.asy on Github.
Generated with Asymptote 3.00-0.
Categories : Surveys | Random Walk (3D)
Tags : #Random
import three; import stats; settings.render=0; struct walk { triple[] nodes; pen[] p; } string[] dirs={"U","D","B","F","R","L"}; // U=up, D=down, B=backward, F=forward, R=right, L=left dirs.cyclic=true; // Comput the nodes of the path walk randWalk(real Srnd(), int n, real angle=90, pen[] p={currentpen}) { p.cyclic=true; walk ow; triple udir=Z, vdir=X, kdir=cross(udir,vdir); triple pos=O, tpos; void changedir(real angle, triple axe) { transform3 T=rotate(angle,axe); udir=T*udir; vdir=T*vdir; kdir=T*kdir; } void nextdir() { int rd=round(Srnd()); ow.p.push(p[rd]); string R=dirs[rd]; if(R == "R") changedir(-angle,kdir); else if(R == "L") changedir(angle,kdir); else if(R == "U") changedir(angle,vdir); else if(R == "D") changedir(-angle,vdir); else if(R == "B") changedir(180,udir); } for (int i=0; i < n; ++i) { tpos=pos+udir; ow.nodes.push(tpos); pos=tpos; nextdir(); } return ow; } walk randWalk(int Srnd(), int n, real angle=90, pen[] p={currentpen}) { real R(){ return Srnd();} return randWalk(R,n,angle,p); } void drawWalk(walk walk) { triple camera=currentprojection.camera; if(currentprojection.infinity) camera *= max(abs(minbound(walk.nodes)),abs(maxbound(walk.nodes))); real[][] depth; for(int i=0; i < walk.nodes.length-1; ++i) { real d=abs(camera-0.5*(walk.nodes[i]+walk.nodes[i+1])); depth.push(new real[] {d,i}); } depth=sort(depth); triple M=walk.nodes[round(depth[0][1])]; triple m=walk.nodes[round(depth[depth.length-1][1]+1)]; // Draw from farthest to nearest while(depth.length > 0) { real[] a=depth.pop(); int i=round(a[1]); draw(walk.nodes[i]--walk.nodes[i+1], abs(walk.nodes[i]-m)/abs(M-m)*walk.p[i]); } } size(18cm); currentprojection=orthographic((0.5,0.5,1)); drawWalk(randWalk(Gaussrand,50000,new pen[] {red,yellow,blue})); shipout(bbox(3mm,Fill));
đź”—randomwalk-fig005

Show randomwalk/fig0050.asy on Github.
Generated with Asymptote 3.00-0.
Categories : Surveys | Random Walk (3D)
Tags : #Random
import three; import stats; settings.render=0; struct walk { triple[] nodes; pen[] p; } string[] dirs={"U","D","B","F","R","L"}; // U=up, D=down, B=backward, F=forward, R=right, L=left dirs.cyclic=true; // Comput the nodes of the path walk randWalk(real Srnd(), int n, real angle=90, pen[] p={currentpen}) { p.cyclic=true; walk ow; triple udir=Z, vdir=X, kdir=cross(udir,vdir); triple pos=O, tpos; void changedir(real angle, triple axe) { transform3 T=rotate(angle,axe); udir=T*udir; vdir=T*vdir; kdir=T*kdir; } void nextdir() { int rd=round(Srnd()); ow.p.push(p[rd]); string R=dirs[rd]; if(R == "R") changedir(-angle,kdir); else if(R == "L") changedir(angle,kdir); else if(R == "U") changedir(angle,vdir); else if(R == "D") changedir(-angle,vdir); else if(R == "B") changedir(180,udir); } for (int i=0; i < n; ++i) { tpos=pos+udir; ow.nodes.push(tpos); pos=tpos; nextdir(); } return ow; } walk randWalk(int Srnd(), int n, real angle=90, pen[] p={currentpen}) { real R(){ return Srnd();} return randWalk(R,n,angle,p); } void drawWalk(walk walk) { triple camera=currentprojection.camera; if(currentprojection.infinity) camera *= max(abs(minbound(walk.nodes)),abs(maxbound(walk.nodes))); real[][] depth; for(int i=0; i < walk.nodes.length-1; ++i) { real d=abs(camera-0.5*(walk.nodes[i]+walk.nodes[i+1])); depth.push(new real[] {d,i}); } depth=sort(depth); triple M=walk.nodes[round(depth[0][1])]; triple m=walk.nodes[round(depth[depth.length-1][1]+1)]; // Draw from farthest to nearest while(depth.length > 0) { real[] a=depth.pop(); int i=round(a[1]); draw(walk.nodes[i]--walk.nodes[i+1], abs(walk.nodes[i]-m)/abs(M-m)*walk.p[i]); } } size(18cm); currentprojection=orthographic((0.5,0.5,1)); drawWalk(randWalk(Gaussrand,1000,60,new pen[] {red,yellow,blue})); shipout(bbox(3mm,Fill));
đź”—randomwalk-fig006

Show randomwalk/fig0060.asy on Github.
Generated with Asymptote 3.00-0.
Categories : Surveys | Random Walk (3D)
Tags : #Random
import three; import stats; settings.render=0; struct walk { triple[] nodes; pen[] p; } string[] dirs={"U","D","B","F","R","L"}; // U=up, D=down, B=backward, F=forward, R=right, L=left dirs.cyclic=true; // Comput the nodes of the path walk randWalk(real Srnd(), int n, real angle=90, pen[] p={currentpen}) { p.cyclic=true; walk ow; triple udir=Z, vdir=X, kdir=cross(udir,vdir); triple pos=O, tpos; void changedir(real angle, triple axe) { transform3 T=rotate(angle,axe); udir=T*udir; vdir=T*vdir; kdir=T*kdir; } void nextdir() { int rd=round(Srnd()); ow.p.push(p[rd]); string R=dirs[rd]; if(R == "R") changedir(-angle,kdir); else if(R == "L") changedir(angle,kdir); else if(R == "U") changedir(angle,vdir); else if(R == "D") changedir(-angle,vdir); else if(R == "B") changedir(180,udir); } for (int i=0; i < n; ++i) { tpos=pos+udir; ow.nodes.push(tpos); pos=tpos; nextdir(); } return ow; } walk randWalk(int Srnd(), int n, real angle=90, pen[] p={currentpen}) { real R(){ return Srnd();} return randWalk(R,n,angle,p); } void drawWalk(walk walk) { triple camera=currentprojection.camera; if(currentprojection.infinity) camera *= max(abs(minbound(walk.nodes)),abs(maxbound(walk.nodes))); real[][] depth; for(int i=0; i < walk.nodes.length-1; ++i) { real d=abs(camera-0.5*(walk.nodes[i]+walk.nodes[i+1])); depth.push(new real[] {d,i}); } depth=sort(depth); triple M=walk.nodes[round(depth[0][1])]; triple m=walk.nodes[round(depth[depth.length-1][1]+1)]; // Draw from farthest to nearest while(depth.length > 0) { real[] a=depth.pop(); int i=round(a[1]); draw(walk.nodes[i]--walk.nodes[i+1], abs(walk.nodes[i]-m)/abs(M-m)*walk.p[i]); } } size(18cm); currentprojection=orthographic((0.5,0.5,1)); drawWalk(randWalk(Gaussrand,10000,60,new pen[] {red,yellow,blue})); shipout(bbox(3mm,Fill));
đź”—randomwalk-fig007

Show randomwalk/fig0070.asy on Github.
Generated with Asymptote 3.00-0.
Categories : Surveys | Random Walk (3D)
Tags : #Random
import three; settings.render=0; struct walk { triple[] nodes; pen[] p; } string[] dirs={"U","D","B","F","R","L"}; // U=up, D=down, F=forward, R=right, L=left dirs.cyclic=true; // Comput the nodes of the path walk randWalk(real Srnd(), int n, real angle=90, pen[] p={currentpen}) { p.cyclic=true; walk ow; triple udir=Z, vdir=X, kdir=cross(udir,vdir); triple pos=O, tpos; void changedir(real angle, triple axe) { transform3 T=rotate(angle,axe); udir=T*udir; vdir=T*vdir; kdir=T*kdir; } void nextdir() { int rd=round(Srnd()); ow.p.push(p[rd]); string R=dirs[rd]; if(R == "R") changedir(-angle,kdir); else if(R == "L") changedir(angle,kdir); else if(R == "U") changedir(angle,vdir); else if(R == "D") changedir(-angle,vdir); else if(R == "B") changedir(180,udir); } for (int i=0; i < n; ++i) { tpos=pos+udir; ow.nodes.push(tpos); pos=tpos; nextdir(); } return ow; } walk randWalk(int Srnd(), int n, real angle=90, pen[] p={currentpen}) { real R(){ return Srnd();} return randWalk(R,n,angle,p); } void drawWalk(walk walk) { triple camera=currentprojection.camera; if(currentprojection.infinity) camera *= max(abs(minbound(walk.nodes)),abs(maxbound(walk.nodes))); real[][] depth; for(int i=0; i < walk.nodes.length-1; ++i) { real d=abs(camera-0.5*(walk.nodes[i]+walk.nodes[i+1])); depth.push(new real[] {d,i}); } depth=sort(depth); triple M=walk.nodes[round(depth[0][1])]; triple m=walk.nodes[round(depth[depth.length-1][1]+1)]; // Draw from farthest to nearest while(depth.length > 0) { real[] a=depth.pop(); int i=round(a[1]); draw(walk.nodes[i]--walk.nodes[i+1], abs(walk.nodes[i]-m)/abs(M-m)*walk.p[i]); } } size(18cm); currentprojection=orthographic((0.5,0.5,1)); drawWalk(randWalk(rand,10000,60,new pen[] {red,yellow,blue})); shipout(bbox(3mm,Fill));
đź”—tiling-fig001

Show tiling/fig0010.asy on Github.
Generated with Asymptote 3.00-0.
Categories : Surveys | Tiling
Tags : #Tiling | #Function (creating) | #Picture
size(10cm,0); picture pavehexagonal(int depth=1) { picture opic; path hexa=polygon(6); pair center; real a,ap,r,rp,r_d=180/pi; for(int j=0; j<depth; ++j) { for (int i=1; i<=6; ++i) { a=i*60-30; r=j*sqrt(3); center=r*(rotate(a)*(1,0)); filldraw(opic, shift(center)*hexa, j/depth*.8red+(1-j/depth)*.8*blue); //Uncomment to see centers of hexagons dot(opic, shift(center)*midpoint(point(hexa,0)--point(hexa,3))); //Uncomment to see circles passing by centers //draw(opic, scale(r)*unitcircle, j/depth*red+(1-j/depth)*blue); rp=r; ap=0; for (real k=0; k<j-1; ++k) { r=sqrt((1.5*(j-1 - k))^2 + 3/4*(j+1 + k)^2); ap+=r_d*acos((rp^2 + r^2 - 3)/(2*r*rp)); center=r*(rotate(a + ap)*(1,0)); filldraw(opic, shift(center)*hexa, j/depth*.8*red+(1-j/depth)*.8*blue); //Uncomment to see the centers of hexagons //dot(opic, shift(center)*midpoint(point(hexa,0)--point(hexa,3))); rp=r; //Uncomment to see circles passing by centers //draw(opic, scale(r)*unitcircle, j/depth*red+(1-j/depth)*blue); } } } return opic; } add(pavehexagonal(7));
đź”—tiling-fig002

Show tiling/fig0020.asy on Github.
Generated with Asymptote 3.00-0.
Categories : Surveys | Tiling
Tags : #Tiling | #Clip
size(6cm,0); //Circular paving with the unit hexagonal picture "hexa" picture pavehexagonal(picture hexa, int depth=1) { picture opic; pair center; real a,ap,r,rp,r_d=180/pi; add(opic, hexa); for(int j=0; j<depth; ++j) { for (int i=1; i<=6; ++i) { a=i*60-30; r=j*sqrt(3); center=r*(rotate(a)*(1,0)); add(opic, shift(center)*hexa); rp=r; ap=0; for (real k=0; k<j-1; ++k) { r=sqrt((1.5*(j-1 - k))^2 + 3/4*(j+1 + k)^2); ap+=r_d*acos((rp^2 + r^2 - 3)/(2*r*rp)); center=r*(rotate(a + ap)*(1,0)); add(opic, shift(center)*hexa); rp=r; } } } return opic; } picture hexa; fill(hexa, polygon(6)); path inh=(0,0)--(.6,sqrt(3)/4)--(.5,sqrt(3)/2)--cycle; for(int i=0; i<6; ++i) { fill(hexa, rotate(60*i)*inh,.5red); } draw(hexa, inh); add(rotate(45)*pavehexagonal(hexa,10)); clip(scale(10)*shift(-.5,-.5)*unitsquare);
đź”—tiling-fig003

Show tiling/fig0030.asy on Github.
Generated with Asymptote 3.00-0.
Categories : Surveys | Tiling
Tags : #Path | #Picture | #Tiling
size(10cm,0); transform r60=rotate(60); pair A=(sqrt(3)/2,-.5); pair B=r60*A, C=r60*B, D=r60*C, E=r60*D, F=r60*E; path AB=A{dir(90)}..(.6,.5)..B{dir(0)}; path DE=shift(E-A)*reverse(AB); path BC=B{dir(45)}..(.75,.7){dir(150)}..{dir(135)}(.65,.75){dir(70)}..(.5,1.25)..C{dir(255)}; path EF=shift(F-B)*reverse(BC); path CD=C{dir(255)}..(-.4,.5){dir(200)}..D{dir(160)}; path FA=shift(A-C)*reverse(CD); draw(A--B--C--D--E--F--cycle,linewidth(2pt)); draw(AB,2pt+.8red); draw(DE,2pt+.8red); draw(BC,2pt+.8blue); draw(EF,2pt+.8blue); draw(CD,2pt+.8green); draw(FA,2pt+.8green); picture hexa; picture eye; filldraw(hexa,AB--BC--CD--DE--EF--FA--cycle,black,white); filldraw(eye,rotate(5)*xscale(.4)*unitcircle,white); filldraw(hexa,subpath(AB,1,2)--subpath(BC,0,2){dir(225)}..{dir(245)}cycle,.1red+yellow,white); draw(hexa,point(BC,0.1){dir(115)}.. (.8,.55) ..(.6,.65){dir(180)},yellow+grey); filldraw(eye,rotate(5)*xscale(.4)*unitcircle,white); fill(eye,rotate(5)*shift(0,-.1)*xscale(.25)*scale(.5)*unitcircle); add(hexa,shift(.6,.9)*scale(.1)*eye); add(shift(3,0)*hexa);
đź”—tiling-fig004

Show tiling/fig0040.asy on Github.
Generated with Asymptote 3.00-0.
Categories : Surveys | Tiling
Tags : #Tiling
size(15cm,0); transform r60=rotate(60); picture hexa; picture eye; pair A=(sqrt(3)/2,-.5); pair B=r60*A, C=r60*B, D=r60*C, E=r60*D, F=r60*E; //Body - corps path AB=A{dir(90)}..(.6,.5)..B{dir(0)}; path DE=shift(E-A)*reverse(AB); path BC=B{dir(45)}..(.75,.7){dir(150)}..{dir(135)}(.65,.75){dir(70)}..(.5,1.25)..C{dir(255)}; path EF=shift(F-B)*reverse(BC); path CD=C{dir(255)}..(-.4,.5){dir(200)}..D{dir(160)}; path FA=shift(A-C)*reverse(CD); filldraw(hexa,AB--BC--CD--DE--EF--FA--cycle,black,white); //Nozzle - bec filldraw(hexa,subpath(AB,1,2)--subpath(BC,0,2){dir(225)}..{dir(245)}cycle,.1red+yellow,white); draw(hexa,point(BC,0.1){dir(115)}.. (.8,.55) ..(.6,.65){dir(180)},yellow+grey); //Eye - oeil filldraw(eye,rotate(5)*xscale(.4)*unitcircle,white); filldraw(eye,rotate(5)*xscale(.4)*unitcircle,white); fill(eye,rotate(5)*shift(0,-.1)*xscale(.25)*scale(.5)*unitcircle); add(hexa,shift(.6,.9)*scale(.1)*eye); //Circular paving with the unit hexagonal picture "hexa" picture pavehexagonal(picture hexa, int depth=1) { picture opic; pair center; real a,ap,r,rp,r_d=180/pi; add(opic, hexa); for(int j=0; j<depth; ++j) { for (int i=1; i<=6; ++i) { a=i*60-30; r=j*sqrt(3); center=r*(rotate(a)*(1,0)); add(opic, shift(center)*hexa); rp=r; ap=0; for (real k=0; k<j-1; ++k) { r=sqrt((1.5*(j-1 - k))^2 + 3/4*(j+1 + k)^2); ap+=r_d*acos((rp^2 + r^2 - 3)/(2*r*rp)); center=r*(rotate(a + ap)*(1,0)); add(opic, shift(center)*hexa); rp=r; } } } return opic; } add(pavehexagonal(rotate(30)*hexa,3));
đź”—tiling-fig005

Show tiling/fig0050.asy on Github.
Generated with Asymptote 3.00-0.
Categories : Surveys | Tiling
Tags : #Tiling
size(10cm,0); transform r60=rotate(60); picture hexa; pair A=(1,0); pair B=r60*A, C=r60*B, D=r60*C, E=r60*D, F=r60*E; real ad=30; real tensio=.15; path AB=A {dir(120-ad)} .. shift(tensio*dir(30))*midpoint(A--B) .. B {dir(120+ad)}; path BC=reverse(rotate(240,B)*AB); path CD=reverse(rotate(240,C)*BC); path DE=reverse(rotate(240,D)*CD); path EF=reverse(rotate(240,E)*DE); path FA=reverse(rotate(240,F)*EF); real lux=-.3, sq=sqrt(3)/2; radialshade(hexa,AB--BC--CD--DE--EF--FA--cycle, lightgrey,(lux*sq,lux/2),0, grey,(lux*sq,lux/2),1+abs(lux)); //Circular paving with the unit hexagonal picture "hexa" picture pavehexagonal(picture hexa, int depth=1) { picture opic; pair center; real a,ap,r,rp,r_d=180/pi; add(opic, hexa); for(int j=0; j<depth; ++j) { for (int i=1; i<=6; ++i) { a=i*60-30; r=j*sqrt(3); center=r*(rotate(a)*(1,0)); add(opic, shift(center)*hexa); rp=r; ap=0; for (real k=0; k<j-1; ++k) { r=sqrt((1.5*(j-1 - k))^2 + 3/4*(j+1 + k)^2); ap+=r_d*acos((rp^2 + r^2 - 3)/(2*r*rp)); center=r*(rotate(a + ap)*(1,0)); add(opic, shift(center)*hexa); rp=r; } } } return opic; } add(pavehexagonal(hexa,4));
đź”—tiling-fig006

Show tiling/fig0060.asy on Github.
Generated with Asymptote 3.00-0.
Categories : Surveys | Tiling
Tags : #Tiling | #Clip
size(10cm,0); transform r60=rotate(60); pair A=(1,0); pair B=r60*A, C=r60*B, D=r60*C, E=r60*D, F=r60*E; real ad=30; real tensio=.25; path AB=A {dir(120-ad)} .. shift(tensio*dir(30))*midpoint(A--B) .. B {dir(120+ad)}; path BC=reverse(rotate(240,B)*AB); path CD=reverse(rotate(240,C)*BC); path DE=reverse(rotate(240,D)*CD); path EF=reverse(rotate(240,E)*DE); path FA=reverse(rotate(240,F)*EF); path pth1=AB--BC--CD--DE--EF--FA; real tensio=.5; path AB=A {dir(120-ad)} .. shift(tensio*dir(30))*midpoint(A--B) .. B {dir(120+ad)}; path BC=reverse(rotate(240,B)*AB); path CD=reverse(rotate(240,C)*BC); path DE=reverse(rotate(240,D)*CD); path EF=reverse(rotate(240,E)*DE); path FA=reverse(rotate(240,F)*EF); path pth2=AB--BC--CD--DE--EF--FA; //Circular paving with the unit hexagonal picture "hexa" picture pavehexagonal(picture hexa, int depth=1) { picture opic; pair center; real a,ap,r,rp,r_d=180/pi; add(opic, hexa); for(int j=0; j<depth; ++j) { for (int i=1; i<=6; ++i) { a=i*60-30; r=j*sqrt(3); center=r*(rotate(a)*(1,0)); add(opic, shift(center)*hexa); rp=r; ap=0; for (real k=0; k<j-1; ++k) { r=sqrt((1.5*(j-1 - k))^2 + 3/4*(j+1 + k)^2); ap+=r_d*acos((rp^2 + r^2 - 3)/(2*r*rp)); center=r*(rotate(a + ap)*(1,0)); add(opic, shift(center)*hexa); rp=r; } } } return opic; } picture hexa, hexat; real lux=-.3, sq=sqrt(3); radialshade(hexa,pth1--cycle, lightgrey,(lux*sq/2,lux/2),0, grey,(lux*sq/2,lux/2),1+abs(lux)); add(hexat,scale(1/(3*sq))*pavehexagonal(hexa,5)); clip(hexat,pth2--cycle); draw(hexat,pth2); add(pavehexagonal(hexat,4));
đź”—tiling-fig007

Author: Guillaume Connan.
Show tiling/fig0070.asy on Github.
Generated with Asymptote 3.00-0.
Categories : Surveys | Tiling
Tags : #Tiling | #Transform | #Shipout | #Fill/Unfill
size(10cm,0); void zigzag(int k) { real t=180/k; pair o=(0,0), m=dir(t), n=rotate(180-2*t,m)*o, b=rotate(4*t-180,n)*m, c=rotate(180-6*t,b)*n, nn=reflect(o,b)*n; path lo=m--n--b--nn--cycle, p=o--m--n--b--c--cycle, pp=reflect(o,b)*p; for (int i=0; i <= k; ++i){ filldraw(rotate(2*t*i,o)*p,.5*(red+blue)); filldraw(rotate(2*t*i,o)*pp,0.25(red+blue)); filldraw(rotate(2*t*i,o)*lo,(red+blue)); } } zigzag(25); shipout(bbox(3mm,2mm+miterjoin+black,FillDraw(0.5*blue)));