🔗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)));