Gallery
This section of the book is a collection of Nell program examples that serve as a handy reference and quick start for creating a drawing you need to make now. To really understand a language you should read a lot of code examples to fully grasp its capabilities. All the program files can be found on the book's website.
Program: (koch.nll)
; Creates a Koch curve whose generation is specified by ; the command line recursion level. a = pi/3; l = 0.025; T1 : L(l) S(T1,1) L(l) T(a) L(l) S(T1,1) L(l) T(-2*a) L(l) S(T1,1) L(l) T(a) L(l) S(T1,1) L(l);
Command line
nell koch.nll T1 3 | nellsvg 6 2 in 0.02 1 > koch.svg
Program: (hilbert.nll)
; Creates a Hilbert curve whose generation is specified by ; the command line recursion level. b = pi/2; s = 0.2; A : T(b) S(B,1) L(s) T(-b) S(A,1) L(s) S(A,1) T(-b) L(s) S(B,1) T(b); B : T(-b) S(A,1) L(s) T(b) S(B,1) L(s) S(B,1) T(b) L(s) S(A,1) T(-b); START :;
Command line
nell hilbert.nll START 5 | nellsvg 6.2 6.2 in 0.02 1 > hilbert.svg
Program: (peano.nll)
; Creates a Peano curve. a = pi/4; l = .0625; T1 : S(T1,1) L(l) S(TP,1) S(T1,1) L(l) S(TN,1) S(T1,1) L(l) S(TN,1) S(T1,1) L(l) S(TN,1) S(T1,1) L(l) S(TP,1) S(T1,1) L(l) S(TP,1) S(T1,1) L(l) S(TP,1) S(T1,1) L(l) S(TN,1) S(T1,1); TP : T(a) L(4*l) T(a); TN : T(-a) L(4*l) T(-a); START : P(0,12.0);
Command line
nell peano.nll START 4 | nellsvg 25 24 cm 0.05 1 > peano.svg
Program: (sierpinski.nll)
; A Sierpinski triangle. a = 2*pi/3; l = 4; T1 : A(l,l/2) S(T1,1) A(l,2*l) L(l) T(a) A(l,l/2) S(T1,1) A(l,2*l) L(l) T(a) A(l,l/2) S(T1,1) A(l,2*l) L(l) T(a); PIC : P(-l/2+2,-l/2+2) S(T1,1);
Command line
nell sierpinski.nll PIC 6 | nellsvg 4 3.5 in 0.005 1 > sierpinski.svg
Program: (cairo.nll)
; Produces a tiling with irregular pentagons called a Cairo tiling. n = 6; l = 0.25; a = pi/3; b = pi/2; d = sqrt(3)-1; T1 : L(l*d) T(a) L(l) T(b) L(l) T(a) L(l) T(b) L(l) T(a); T2 : L(l*d) T(-a) L(l) T(-b) L(l) T(-a) L(l) T(-b) L(l) T(-a); T3 : L(l) T(b) L(l) T(a) L(l*d) T(a) L(l) T(b) L(l) T(a); T4 : S(T1,1) S(T2,1) T(2*a) S(T3,1) T(-2*a) M(l*d) T(-a) S(T3,1) T(a); T5 : S(T4,1) T(a) M(2*l) T(-a) S(T4,1); T6 : [S(T5,1)] M(2*sqrt(3)*l); T7 : [S(T6,n)] T(b) M(2*sqrt(3)*l) T(-b); PIC : P(0.35,0.35) S(T7,n);
Command line
nell cairo.nll PIC 10 | nellsvg 5.75 5.5 in 0.02 1 > cairo.svg
Program: (tatami.nll)
; Creates a tatami mat. a = -pi/2; l = 5; n = 6; i = 0; T1 : L(2*l) T(a) L(l) T(a) L(2*l) T(a) L(l) T(a) M(2*l); T2 : S(T1,i) M(l) T(a) S(T1,i) M(l) T(a) S(T1,i) M(l) T(a) S(T1,i) M(l) T(a); T3 : T(-pi/4) M(-l*sqrt(2)) T(pi/4) A(i,i+1) S(T2,1); PIC : P(35,35) T(-pi/4) M(-l/sqrt(2)) T(pi/4) S(T3,n);
Command line
nell tatami.nll PIC 5 | nellsvg 70 70 mm 0.2 1 > tatami.svg
Program: (trellis1.nll)
; Creates a trellis pattern. l = 0; lc1 = 0.7; ac1 = 0.9; lc2 = -0.7; ac2 = -0.9; y = 0.85; h = sqrt(11)/10; T1 : M(0.5) [T(pi/2) M(h) T(-pi/2) B(l,lc1,ac1,lc2,ac2)] [T(-pi/2) M(h) T(pi/2) B(l,lc1,-ac1,lc2,-ac2)] M(0.5); T2 : S(T1,1) C(0.4) C(0.6) E(0.4,0.1) E(0.1,0.4); T3 : P(-0.75,y) S(T2,8) S(T1,1) A(y,y+1.5); START : S(T3,6);
Command line
nell trellis1.nll START 3 | nellsvg 7.5 9.25 in 0.02 1 > trellis1.svg
Program: (spiral.nll)
d = 0.025; a = pi/8; T1 : L(d) T(a); ARM : S(T1,8) A(d,d+0.025); START : P(2.55,2.55) <S(ARM,40)>;
Command line
nell spiral.nll START 3 | nellsvg 5.1 5.1 in 0.02 1 > spiral.svg
Program: (ladybug.nll)
; Draws a lady bug. MOUTH : M(-0.4) R(0.3,0.1,0,-pi); EYE : T(pi/2) M(0.2) C(0.05); ANTENNA : T(pi/2) M(0.5) [Q(0.5,0.5,-pi/12) C(0.03)] T(-pi/2) M(0.1) T(pi/2) [Q(0.5,0.5,-pi/12) C(0.03)]; HEAD : R(0.7,0.5,0,pi) R(0.7,0.3,0,-pi) [S(MOUTH,1) S(EYE,1)] S(ANTENNA,1); BODY : R(1.2,1,0,pi) R(1.2,0.35,0,-pi) R(1.2,0.7,0,pi); FLEG : M(-1.2) T(-2*pi/3) Q(1,1,pi/3); front leg MLEG : T(-pi/2) M(0.35) T(-pi/8) Q(0.6,0.62,pi/8); middle leg BLEG : M(1.2) T(-pi/3) Q(1,1,-pi/3); back leg FSPOTS : P(1.95,2.2) C(0.15) P(2.5,1.9) C(0.15) P(3.6,2.0) C(0.15) P(3.0,2.5) C(0.15); foreground spots BSPOTS : P(1.8,2.4) T(2*pi/5) R(0.08,0.08,pi,7*pi/8) P(2.5,2.85) C(0.08) P(3.6,2.7) C(0.08) P(3.0,2.83) C(0.1); background spots START : P(1,2) [S(HEAD,1)] M(1.9) S(BODY,1) [S(FSPOTS,1)] [S(BSPOTS,1)] [S(FLEG,1)] [S(MLEG,1)] [S(BLEG,1)];
Command line
nell ladybug.nll START 3 | nellsvg 6 5 in 0.02 1 > ladybug.svg
Program: (tess03.nll)
; Creates a triangle tesselation. a = 2*pi/3; d = sqrt(2*(1-cos(a))); T1 : L(d) T(5*a/4) L(1) T(a/2) L(1) T(a) L(1) T(a/2) L(1) T(3*a/4); T2 : L(d) T(a) L(d); PIC : P(1,0.65) S(T1,3) T(-a/4) M(1) T(a/4) S(T2,3);
Command line
nell tess03.nll PIC 5 | nellsvg 3.7 3.25 cm 0.01 1 > tess03.svg
Program: (tess05.nll)
; Creates a pentagon tesselation. a = 2*pi/5; d1 = sqrt(2*(1-cos(a))); d2 = sqrt(2*(1-cos(2*a))); T1 : L(d1) T(7*a/4) L(1) T(3*a/2) L(1) T(a) L(1) T(3*a/2) L(1) T(a/4); T2 : L(d2) T(9*a/4) L(1) T(a/2) L(1) T(2*a) L(1) T(a/2) L(1) T(3*a/4); T3 : L(d1) T(a) L(d1); PIC : P(1.4,1.3) S(T1,5) T(-3*a/4) M(1) T(5*a/4) S(T2,5) T(-a/4) M(1) T(a/4) S(T3,5);
Command line
nell tess05.nll PIC 5 | nellsvg 4 3.9 cm 0.01 1 > tess05.svg
Program: (tess06.nll)
; Creates a hexagon tesselation. a = pi/3; d1 = sqrt(2*(1-cos(a))); d2 = sqrt(2*(1-cos(2*a))); d3 = 2/sqrt(3); T1 : L(d1) T(2*a) L(1) T(2*a) L(1) T(a) L(1) T(2*a) L(1); T2 : L(d2) T(5*a/2) L(1) T(a) L(1) T(2*a) L(1) T(a) L(1) T(a/2); T3 : L(d3) T(a) L(d3); PIC : P(1.6,1.5) S(T1,6) T(-a) M(1) T(3*a/2) S(T2,6) T(-a/2) M(1) T(a/2) S(T3,6);
Command line
nell tess06.nll PIC 5 | nellsvg 4.2 4.7 cm 0.01 1 > tess06.svg
Program: (tess08.nll)
; Creates an octagon tesselation. a = pi/4; d1 = sqrt(2*(1-cos(a))); d2 = sqrt(2*(1-cos(2*a))); d3 = sqrt(2*(1-cos(3*a))); T1 : L(d1) T(5*a/2) L(1) T(3*a) L(1) T(a) L(1) T(3*a) L(1) T(-a/2); T2 : L(d2) T(3*a) L(1) T(2*a) L(1) T(2*a) L(1) T(2*a) L(1); T3 : L(d3) T(7*a/2) L(1) T(a) L(1) T(3*a) L(1) T(a) L(1) T(a/2); PIC : P(2.3,1.8) S(T1,8) T(-3*a/2) M(1) T(2*a) S(T2,8) T(-a) M(1) T(3*a/2) S(T3,8);
Command line
nell tess08.nll PIC 5 | nellsvg 5.4 5.4 cm 0.01 1 > tess08.svg
Program: (tess10.nll)
; Creates a decagon tesselation. a = pi/5; d1 = sqrt(2*(1-cos(a))); d2 = sqrt(2*(1-cos(2*a))); d3 = sqrt(2*(1-cos(3*a))); d4 = sqrt(2*(1-cos(4*a))); T1 : L(d1) T(3*a) L(1) T(4*a) L(1) T(a) L(1) T(4*a) L(1) T(-a); T2 : L(d2) T(7*a/2) L(1) T(3*a) L(1) T(2*a) L(1) T(3*a) L(1) T(-a/2); T3 : L(d3) T(4*a) L(1) T(2*a) L(1) T(3*a) L(1) T(2*a) L(1); T4 : L(d4) T(9*a/2) L(1) T(a) L(1) T(4*a) L(1) T(a) L(1) T(a/2); PIC : P(3,2.3) S(T1,10) T(-2*a) M(1) T(5*a/2) S(T2,10) T(-3*a/2) M(1) T(2*a) S(T3,10) T(-a) M(1) T(3*a/2) S(T4,10);
Command line
nell tess10.nll PIC 5 | nellsvg 6.6 6.5 cm 0.01 1 > tess10.svg
Program: (tess16.nll)
; Creates a 16-gon tesselation. a = pi/8; d1 = sqrt(2*(1-cos(a))); d2 = sqrt(2*(1-cos(2*a))); d3 = sqrt(2*(1-cos(3*a))); d4 = sqrt(2*(1-cos(4*a))); d5 = sqrt(2*(1-cos(5*a))); d6 = sqrt(2*(1-cos(6*a))); d7 = sqrt(2*(1-cos(7*a))); T1 : L(d1) T(9*a/2) L(1) T(7*a) L(1) T(a) L(1) T(7*a) L(1) T(-5*a/2); T2 : L(d2) T(5*a) L(1) T(6*a) L(1) T(2*a) L(1) T(6*a) L(1) T(-2*a); T3 : L(d3) T(11*a/2) L(1) T(5*a) L(1) T(3*a) L(1) T(5*a) L(1) T(-3*a/2); T4 : L(d4) T(6*a) L(1) T(4*a) L(1) T(4*a) L(1) T(4*a) L(1) T(-a); T5 : L(d5) T(13*a/2) L(1) T(3*a) L(1) T(5*a) L(1) T(3*a) L(1) T(-a/2); T6 : L(d6) T(7*a) L(1) T(2*a) L(1) T(6*a) L(1) T(2*a) L(1) T(0); T7 : L(d7) T(15*a/2) L(1) T(a) L(1) T(7*a) L(1) T(a) L(1) T(a/2); PIC : P(5.05,4.25) S(T1,16) T(-7*a/2) M(1) T(4*a) S(T2,16) T(-3*a) M(1) T(7*a/2) S(T3,16) T(-5*a/2) M(1) T(3*a) S(T4,16) T(-2*a) M(1) T(5*a/2) S(T5,16) T(-3*a/2) M(1) T(2*a) S(T6,16) T(-a) M(1) T(3*a/2) S(T7,16);
Command line
nell tess16.nll PIC 5 | nellsvg 10.5 10.5 cm 0.01 1 > tess16.svg
Program: (tile005.nll)
; Creates a tiling using octagons a = pi/4; d = 1; d1 = 1 + sqrt(2); d2 = 2 + sqrt(2); T1 : L(1) T(a); T2 :T(a) M(d*d1) T(-a)T(-a) M(d*d1) T(a); T3 : [S(T2,4)] T(2*a) M(d*d2) T(-2*a); START : M(1) S(T3,4);
Command line
nell tile005.nll START 10 | nellsvg 15 15 cm 0.05 1 > tile005.svg
Program: (tile006.nll)
; Creates a square in center alternating with squares and pentagons. l = 10; a = 2*pi/4; b = 2*pi/5; T1 : L(l) T(b) L(l) T(b) S(T2,1) L(l) T(b) S(T2,1) L(l) T(b) L(l) T(b); T2 : L(l) T(-a) L(l) T(-a) S(T1,1) L(l) T(-a) L(l) T(-a); PIC : P(100,100) T(a/2) M(-l/sqrt(2)) T(-a/2) S(T2,1) M(l) T(a) S(T2,1) M(l) T(a) S(T2,1) M(l) T(a) S(T2,1) M(l) T(a) P(100,100) C(8.7*l-2.5) C(8.7*l);
Command line
nell tile006.nll PIC 7 | nellsvg 200 200 mm 0.5 1 > tile006.svg
Program: (tile007.nll)
; Creates pentagon in center alternating with rectangles and pentagons. l = 5; a = 2*pi/5; b = 2*pi/5; T1 : L(l) T(b) L(l) T(b) S(T2,1) L(l) T(b) S(T2,1) L(l) T(b) L(l) T(b); T2 : L(l) T(-pi/2) L(2*l) T(-pi/2) S(T1,1) L(l) T(-pi/2) L(2*l) T(-pi/2); PIC : P(66,66) T(3*pi/10) M(-l/(2*cos(3*pi/10))) T(-3*pi/10) S(T2,1) M(l) T(a) S(T2,1) M(l) T(a) S(T2,1) M(l) T(a) S(T2,1) M(l) T(a) S(T2,1) M(l) T(a) P(66,66) C(13*l-2.5) C(13*l);
Command line
nell tile007.nll PIC 7 | nellsvg 132 132 mm 0.5 1 > tile007.svg
Program: (tile008.nll)
; Creates hexagon in center alternating with rectangles and hexagons. l = 5; a = pi/3; T1 : L(l) T(a) S(T2,1) L(l) T(a) S(T2,1) L(l) T(a) S(T2,1) L(l) T(a) S(T2,1) L(l) T(a) L(l) T(a); T2 : L(l) T(-pi/2) L(2*l) T(-pi/2) S(T1,1) L(l) T(-pi/2) L(2*l) T(-pi/2); PIC : P(55,62) T(a) M(-l) T(-a) S(T2,1) M(l) T(a) S(T2,1) M(l) T(a) S(T2,1) M(l) T(a) S(T2,1) M(l) T(a) S(T2,1) M(l) T(a) S(T2,1) M(l) T(a);
Command line
nell tile008.nll PIC 6 | nellsvg 110 124 mm 0.5 1 > tile008.svg
Program: (tile009.nll)
; Creates a pattern with equilateral triangles. l1 = 10; l2 = 5; a = 2*pi/3; n = 2; T1 : L(l1) T(a) L(l1) T(a) L(l1) T(a) M(l1+l2) S(T1,1); T2 : [S(T1,1)] T(pi/3) M(l1+l2) T(-pi/3); T3 : [S(T2,n)] T(pi/6); PIC : P(38,38) S(T3,12) C(25) C(37); C(50);
Command line
nell tile009.nll PIC 4 | nellsvg 76 76 mm 0.5 1 > tile009.svg
Program: (tile011.nll)
; Creates a pattern with hexagons. l1 = 10; l2 = 10; a = pi/3; n = 2; T1 : L(l1) T(a) L(l1) T(a) L(l1) T(a) L(l1) T(a) L(l1) T(a) L(l1) T(3*a/2) M(l1*sqrt(3)+l2) T(-a/2) S(T1,1); T2 : [S(T1,1)] T(pi/2) M(l1*sqrt(3)+l2) T(-pi/2); T3: [S(T2,n)] T(pi/6); PIC: P(72,72) S(T3,12) C(70.0);
Command line
nell tile011.nll PIC 4 | nellsvg 144 144 mm 0.5 1 > tile011.svg
Program: (tile012.nll)
; Creates a tiling using dodecagons. ; d = tile spacing ; d < 1 tiles overlap ; d = 1 exact tiling ; d > 1 tiles space apart ; d = 0.5 produces an interesting tiling a = pi/6; d = sqrt(3)-1; d0 = 2+sqrt(3); d1 = sqrt(3)*d0; n = 6; ah = pi/3; dh = 0.5; h1 = sqrt(2*(1-cos(ah)))/2; h2 = sqrt(2*(1-cos(2*ah)))/2; H1 : L(h1) T(2*ah) L(dh) T(2*ah) L(dh) T(ah) L(dh) T(2*ah) L(dh); H2 : L(h2) T(5*ah/2) L(dh) T(ah) L(dh) T(2*ah) L(dh) T(ah) L(dh) T(ah/2); HP : T(ah/2) S(H1,6) T(-ah) M(dh) T(3*ah/2) S(H2,6); T0 : L(1) T(a); T1 : S(T0,12) [T(pi/3) M(1) T(pi/6) M(dh) T(-pi/2) S(HP,1)]; T2 : S(T1,1) T(2*a) M(d*d0) T(-2*a) S(T1,1); T3 : [S(T2,1)] M(d*d0); T4 : [S(T3,n)] T(pi/2) M(d*d1) T(-pi/2); PIC : S(T4,n/2);
Command line
nell tile012.nll PIC 10 | nellsvg 16 16 cm 0.02 1 > tile012.svg
Program: (triadcirc.nll)
; Creates the circle of major triads. a = pi/6; l = 1; T0 : C(l/4) M(l/2); T1 : [M(1/4) S(T0,3)] T(a); PIC : P(2.3,2.3) C(3*l/4) C(5*l/4) C(7*l/4) C(9*l/4) S(T1,12);
Command line
nell triadcirc.nll PIC 6 | nellsvg 4.6 4.6 in 0.01 1 > triadcirc.svg
Program: (horns.nll)
; horns.pen creates a pair of spiral horns composed of squares and ; triangles. The length of the horns depends on the value of n. n = 30; n determines length of horns. A = 5; B = 12; C = 13; a = A; b = B; c = C; s = b/c; t1 = pi-angle(a,b,c); t2 = pi-angle(b,c,a); t3 = pi-angle(c,a,b); t4 = -pi/2; t5 = -2*pi/3; L1 : L(c) T(t4) L(c) T(t4) L(c) T(t4) L(c) T(t4); left square L2 : L(c) T(t3) L(a) T(t1) L(b) T(t2); left triangle L3 : S(L1,1) S(L2,1) A(a,s*a) A(b,s*b) A(c,s*c) T(3*pi/2-t2) M(c) T(-pi/2); R1 : L(c) T(t4) L(c) T(t4) L(c) T(t4) L(c) T(t4); right square R2 : L(c) T(t2) L(b) T(t1) L(a) T(t3); right triangle R3 : S(R1,1) S(R2,1) A(a,s*a) A(b,s*b) A(c,s*c) T(pi-t3) M((a+b)/s) T(-pi/2); T1 : L(2*c) T(t5) L(2*c) T(t5) L(2*c) T(t5); PIC : P(70,36) M(-c) [S(L3,n)] A(a,A) A(b,B) A(c,C) M(c) [S(R3,n)] A(a,A) A(b,B) A(c,C) P(70-c,36-c) S(T1,1);
Command line
nell horns.nll PIC 10 | nellsvg 140 70 mm 0.2 1 > horns.svg
Program: (network.nll)
; Creates a network of resistors. a = pi/3; b = 2*a; l1 = 0.25; l2 = l1/2; V : T(-b) L(l1) T(b) L(l1); R : L(l1) T(a) L(l2) S(V,2) T(-b) L(l1) T(b) L(l2) T(-a) L(l1); SRC : L(l1+l2) M(l1) C(l1) M(l1) L(l1+l2); T : S(R,1) [T(-pi/2) S(R,1)]; START : P(l1,1.375) [S(T,3)] P(l1,.125) [S(R,3)] T(pi/2) S(SRC,1);
Command line
nell network.nll START 3 | nellsvg 4.125 1.5 in 0.02 1 > network.svg
Program: (prism.nll)
; This shows the dispersion of light through an isosceles prism. n0 = 1; air index of refraction n1 = 1.6; prism index of refraction phi = pi/3; apex angle psi = (pi-phi)/2; base interior angle a = (pi+phi)/2; base exterior angle s = 2; length of the two equal sides sb = 2*s*sin(phi/2); length of base h = 1; ray entrance height above base max=s*sin(psi) x = h/cos(phi/2); t0 = pi/4; ray entrance angle, horizontal=phi/2 t1 = asin(n0*sin(t0)/n1); t2 = phi-t1; t3 = asin(n1*sin(t2)/n0); l0 = (s-x)*sin(phi)/cos(t2); PRISM :; CALC : A(n1,n1-0.1) A(t1,asin(n0*sin(t0)/n1)) A(t2,phi-t1) A(t3,asin(n1*sin(t2)/n0)) A(l0,(s-x)*sin(phi)/cos(t2)); RAY : [T(t1-pi/2) L(l0) T(t2-t3) L(2)] S(CALC,1); START : M(0.5) S(PRISM,1) T(psi) M(x) [T(pi/2+t0) L(1)] S(RAY,4);
Command line
nell prism.nll START 3 | nellsvg 4 2 in 0.02 1 > prism.svg
Program: (ball.nll)
; This shows parallel rays of light being focused by a ball lens n0 = 1; air index of refraction n1 = 1.5; lens index of refraction h = 0.9; t0 = asin(h); t1 = asin(n0*h/n1); T1 :; T2 : A(h,h-0.1) A(t0,asin(h)) A(t1,asin(n0*h/n1)) [S(T1,1)]; T3 : A(h,h+0.1) A(t0,asin(h)) A(t1,asin(n0*h/n1)) [S(T1,1)]; START : P(0.25,1) [L(1.5) [T(pi/2) L(1)] C(1) [T(-pi/2) L(1)] L(1.5)] S(T2,8) A(h,-0.9) S(T3,8);
Command line
nell ball.nll START 3 | nellsvg 4 2 in 0.02 1 > ball.svg
Program: (squarelat.nll)
; Creates a nr x nc square lattice. ; nr = number of rows ; nc = number of columns ; d = lattice spacing ; r = node circle radius nc = 6; nr = 6; d = 1.5; r = 0.5; a = pi/2; T1 : C(r) M(r) L(d-2*r) M(r); T2 : [S(T1,nc-1) C(r)] T(a) M(d) T(-a); T3 : M(r) L(d-2*r) M(r); T4 : [T(a) S(T3,nr-1)] M(d); PIC : P(0.55,0.55) [S(T2,nr)] S(T4,nc-1) T(a) S(T3,nr-1);
Command line
nell squarelat.nll PIC 6 | nellsvg 8.6 8.6 cm 0.03 1 > squarelat.svg
Program: (squarepat0.nll)
; Creates a simple square tiling. ; d = tile spacing ; d < 1 tiles overlap ; d = 1 exact tiling ; d > 1 tiles space apart a = pi/2; d = 1.1; T1 : L(1) T(a) L(1) T(a) L(1) T(a) L(1) T(a) M(d); T2 : [S(T1,8)] T(a) M(d) T(-a); PIC : P(0.15,0.15) S(T2,8);
Command line
nell squarepat0.nll PIC 6 | nellsvg 9 9 cm 0.03 1 > squarepat0.svg
Program: (squarepat1.nll)
; A square pattern of hexagons, circles and squares. ; d1, d2 = tile spacing a = pi/2; b = pi/3; d1 = 1.5; d2 = (1+sqrt(3))/2; n = 4; A : L(1) T(a) L(1) T(a) L(1) T(a) L(1) T(a); B : L(1) T(b) L(1) T(b) L(1) T(b) L(1) T(b) L(1) T(b) L(1) T(b); T2 : C(0.5) T(a/2) M(1/sqrt(2)) T(3*a/2) S(A,1); T3 : M(1) T(2*b) S(B,1); T4 : [S(T2,1)] M(d1) [S(T3,1)] M(d1); T5 : [S(T3,1)] M(d1) [S(T2,1)] M(d1); T6 : [S(T4,n)] T(a) M(d2) T(-a) [S(T5,n)] T(a) M(d2) T(-a); PIC : P(1,1) S(T6,n);
Command line
nell squarepat1.nll PIC 6 | nellsvg 12.5 11.5 cm 0.03 1 > squarepat1.svg
Program: (squarepat2.nll)
; Creates a square pattern of overlapping hexagons. ; d1, d2 = tile spacing a = pi/2; b = pi/3; d1 = 1.5; d2 = sqrt(3); n = 4; A : L(1) T(a) L(1) T(a) L(1) T(a) L(1) T(a); B : L(1) T(b) L(1) T(b) L(1) T(b) L(1) T(b) L(1) T(b) L(1) T(b); T2 : M(1) T(2*b) S(B,1); T3 : M(1) T(2*b) S(B,1); T4 : [S(T2,1)] M(d1) [S(T3,1)] M(d1); T5 : [S(T3,1)] M(d1) [S(T2,1)] M(d1); T6 : [S(T4,n)] T(a) M(d2) T(-a) [S(T5,n)] T(a) M(d2) T(-a); PIC : P(1,1) S(T6,n);
Command line
nell squarepat2.nll PIC 6 | nellsvg 12.5 14.1 cm 0.03 1 > squarepat2.svg
Program: (pent0.nll)
; Pentagonal star and pentagram inside pentagon. a = 2*pi/5; l = 5; T1 : A(l,l/2) S(T1,1) A(l,2*l) L(l) T(a) A(l,l/2) S(T1,1) A(l,2*l) L(l) T(a) A(l,l/2) S(T1,1) A(l,2*l) L(l) T(a) A(l,l/2) S(T1,1) A(l,2*l) L(l) T(a) A(l,l/2) S(T1,1) A(l,2*l) L(l) T(a); PIC : P(-l/2+4.5,-l/2+3.0) S(T1,1);
Command line
nell pent0.nll PIC 2 | nellsvg 9 8.5 cm 0.05 1 > pent0.svg
Program: (pent1.nll)
; Produces a pattern with 31 pentagons. a = 2*pi/5; l = 0.5; T0 : L(l) T(-a) L(l) T(-a) L(l) T(-a) L(l) T(-a) L(l) T(-a); T1 : S(T2,1) L(l) T(a) S(T2,1) L(l) T(a) S(T2,1) L(l) T(a) S(T2,1) L(l) T(a) S(T2,1) L(l) T(a); T2 : L(l) T(-a) L(l) T(-a) S(T3,1) L(l) T(-a) S(T3,1) L(l) T(-a) L(l) T(-a); T3 : L(l) T(a) L(l) T(a) S(T0,1) L(l) T(a) S(T0,1) L(l) T(a) L(l) T(a); START : P(2.15,2.05) S(T1,1);
Command line
nell pent1.nll START 4 | nellsvg 4.8 4.6 in 0.02 1 > pent1.svg
Program: (pent2.nll)
; Produces a pentagon pattern. ; Size of pattern is controlled by changing the maximum recursion ; level parameter in command line. a = 2*pi/5; l = 0.25; T1 : P(3.7,3.5) S(T2,1) L(l) T(a) S(T2,1) L(l) T(a) S(T2,1) L(l) T(a) S(T2,1) L(l) T(a) S(T2,1) L(l) T(a); T2 : L(l) T(-a) L(l) T(-a) S(T3,1) L(l) T(-a) S(T4,1) L(l) T(-a) L(l) T(-a); T3 : L(l) T(a) L(l) T(a) L(l) T(-a) L(l) T(-a) S(T3,1) L(l) T(-a) S(T4,1) L(l) T(-a) L(l) T(-a) L(l) T(a) L(l) T(-a) L(l) T(-a) L(l) T(-a) S(T4,1) L(l) T(-a) L(l) T(-a) L(l) T(a) L(l) T(a); T4 : L(l) T(a) L(l) T(a) L(l) T(a) L(l) T(-a) L(l) T(-a) L(l) T(-a) S(T4,1) L(l) T(-a) L(l) T(-a) L(l) T(a) L(l) T(a);
Command line
nell pent2.nll T1 6 | nellsvg 7.65 7.25 in 0.02 1 > pent2.svg
Program: (pent3.nll)
; Creates a pentagon wreath. a = 2*pi/5; r = 1; s = 0.25; d = s*(1+sqrt(5))/2; T0 :; T1 : M(s) T(a); T2 : S(T0,1) S(T1,5); T3 : S(T2,1) T(a/2) M(2*d+s); START : P(2.65,0.4) S(T3,10);
Command line
nell pent3.nll START 4 | nellsvg 4.3 4.1 in 0.02 1 > pent3.svg
Program: (manda01.nll)
; A mandala of triangles. l1 = 8; l2 = 13; l3 = 13; scale = 0.75; n2 = 5; a1 = angle(l3,l1,l2); a2 = angle(l1,l2,l3); a3 = angle(l2,l3,l1); dm = l1*sin(a2/2)/(cos(a1/2)*sin(a2/2)+sin(a1/2)*cos(a2/2)); a = 2*pi/n2; T1 : L(l1) T(pi-a2) L(l2) T(pi-a3) L(l3) T(pi-a1); PIC1 : S(T1,1) T(a); PIC3 : [T(a1/2) M(dm) T(-a1/2) S(PIC1,n2)] T(a); PIC4 : A(l1,scale*l1) A(l2,scale*l2) A(l3,scale*l3) S(PIC3,n2); PIC5 : P(14,14) S(PIC1,n2) C(l3) S(PIC4,1);
Command line
nell manda01.nll PIC5 3 | nellsvg 28 28 mm 0.2 1 > manda01.svg
Program: (manda03.nll)
; A template for creating mandalas with rectangles. L1 = 13; L1,L2 = sides of rectangle. L2 = 8; Note: Scaling the same rectangle can make different mandalas. d = 2; d = spacing between concentric rectangles n1 = 1; n1 = number of concentric rectangles n2 = 10; n2 = number of copies going around the circle ; For scripting, everything below here remains unchanged. l1 = L1; l2 = L2; ai = pi/2; dm = d*sqrt(2); a = 2*pi/n2; T1 : L(l1) T(ai) L(l2) T(ai) L(l1) T(ai) L(l2) T(ai); PIC2 : S(T1,1) T(ai/2) M(dm) T(-ai/2) A(l1,l1-2*d) A(l2,l2-2*d); PIC3 : [S(PIC2,n1)] T(a) A(l1,L1) A(l2,L2); PIC4 : P(20,20) [S(PIC3,n2)] C(sqrt(2)*l1);
Command line
nell manda03.nll PIC4 10 | nellsvg 40 40 mm 0.2 1 > manda03.svg
Program: (manda05.nll)
; Creates a mandala of equilateral triangles. a = pi/3; d = 1.0; len = 5; dlen = d/(1.5*tan(a/2)); dm = d/(2*sin(a/2)); T1 :; PIC2 : S(T1,1) A(len,len-dlen) T(a/2) M(dm) T(-a/2); PIC3 : [S(PIC2,4)] T(a) A(len,5); PIC4 : P(5,5) [S(PIC3,6)] C(5);
Command line
nell manda05.nll PIC4 10 | nellsvg 11 11 cm 0.05 1 > manda05.svg
Program: (manda07.nll)
; A mandala of triangles with the largest inscribed circle ; inside each triangle. L1 = 10; L2 = 10; L3 = 10; d = 2; n1 = 2; n2 = 5; l1 = L1; l2 = L2; l3 = L3; a1 = angle(l3,l1,l2); a2 = angle(l1,l2,l3); a3 = angle(l2,l3,l1); d1 = d/tan(a1/2); d2 = d/tan(a2/2); d3 = d/tan(a3/2); dm = d/sin(a1/2); cm = sin(a2/2)/(cos(a1/2)*sin(a2/2)+sin(a1/2)*cos(a2/2)); a = 2*pi/n2; tri : L(l1) T(pi-a2) L(l2) T(pi-a3) L(l3) T(pi-a1); circ : T(a1/2) M(l1*cm) C(sqrt((-l1+l2+l3)*(l1-l2+l3)*(l1+l2-l3)/ (l1+l2+l3))/2) T(-a1/2); PIC2 : S(tri,1) [S(circ,1)] T(a1/2) M(dm) T(-a1/2) A(l1,l1-d1-d2) A(l2,l2-d2-d3) A(l3,l3-d1-d3); PIC3 : [S(PIC2,n1)] T(a) A(l1,L1) A(l2,L2) A(l3,L3); PIC4 : P(11,11) [S(PIC3,n2)] C(L3);
Command line
nell manda07.nll PIC4 3 | nellsvg 22 22 mm 0.2 1 > manda07.svg
Program: (manda09.nll)
; A template for creating mandalas with triangles. L1 = 10; L1,L2,L3 = sides of triangles. L2 = 10; Note: Scaling the same triangle can make different mandalas. L3 = 10; d = 2; d = spacing between concentric triangles n1 = 1; n1 = number of concentric triangles n2 = 6; n2 = number of copies going around the circle l1 = L1; l2 = L2; l3 = L3; a1 = pi/3; d1 = d/tan(a1/2); dm = d/sin(a1/2); a = 2*pi/n2; T1 : L(l1) T(pi-a1) S(S1,1) L(l2) T(pi-a1) L(l3) T(pi-a1); S1 : L(l2) T(-pi/2) L(l2) T(-pi/2) S(T1,1) L(l2) T(-pi/2) L(l2) T(-pi/2); PIC2 : S(T1,1) T(a1/2) M(dm) T(-a1/2) A(l1,l1-2*d1) A(l2,l2-2*d1) A(l3,l3-2*d1); PIC3 : [S(PIC2,n1)] T(a) A(l1,L1) A(l2,L2) A(l3,L3); PIC4 : P(40,40) [S(PIC3,n2)];
Command line
nell manda09.nll PIC4 9 | nellsvg 80 80 mm 0.2 1 > manda09.svg
Program: (manda11.nll)
; A template for creating mandalas with triangles. L1 = 10; L1,L2,L3 = sides of triangles. L2 = 10; Note: Scaling the same triangle can make different mandalas. L3 = 10; d = 2; d = spacing between concentric triangles n1 = 1; n1 = number of concentric triangles n2 = 1; n2 = number of copies going around the circle l1 = L1; l2 = L2; l3 = L3; a1 = pi/3; d1 = d/tan(a1/2); dm = d/sin(a1/2); a = 2*pi/n2; T1 : L(l1) T(pi-a1) S(S1,1) L(l2) T(pi-a1) S(S1,1) L(l3) T(pi-a1) S(S1,1); S1 : L(l2) T(-pi/2) L(l2) T(-pi/2) S(T1,1) L(l2) T(-pi/2) L(l2) T(-pi/2); PIC2 : S(T1,1) T(a1/2) M(dm) T(-a1/2) A(l1,l1-2*d1) A(l2,l2-2*d1) A(l3,l3-2*d1); PIC3 : [S(PIC2,n1)] T(a) A(l1,L1) A(l2,L2) A(l3,L3); PIC4 : P(62,65) [S(PIC3,n2)] T(a1/2) M(l1/(2*cos(a1/2))) T(-a1/2) C(60.0) C(65.0);
Command line
nell manda11.nll PIC4 11 | nellsvg 135 135 mm 0.2 1 > manda11.svg
Program: (manda13.nll)
; Has intertwined production rules (T1 and T2), and produces ; a mandala of triangles, where the most important parameter is the ; maximum substitution level, given on the command line, with a ; higher number making longer mandala arms. n2 = 10; a = 2*pi/n2; l1 = 8; l2 = 13; l3 = 13; k1 = 5; k2 = 8; k3 = 8; a1 = angle(l3,l1,l2); a2 = angle(l1,l2,l3); a3 = angle(l2,l3,l1); b1 = angle(k3,k1,k2); b2 = angle(k1,k2,k3); b3 = angle(k2,k3,k1); T1 : L(l1) T(pi-a2) S(T2,1) L(l2) T(pi-a3) L(l3) T(pi-a1); T2 : L(k1) T(b2-pi) S(T1,1) L(k2) T(b3-pi) L(k3) T(b1-pi); PIC1 : [S(T1,1)] T(a); PIC2 : P(32,32) S(PIC1,n2);
Command line
nell manda13.nll PIC2 7 | nellsvg 65 65 mm 0.2 1 > manda13.svg
Program: (manda15.nll)
; Creates a mandala with pentagonal symmetry. a = 2*pi/5; b1 = pi - angle(3, 10, 12); b2 = pi - angle(10, 12, 3); b3 = pi - angle(12, 3, 10); c1 = pi - angle(3, 8, 10); c2 = pi - angle(8, 10, 3); c3 = pi - angle(10, 3, 8); d1 = pi - angle(3, 6, 8); d2 = pi - angle(6, 8, 3); d3 = pi - angle(8, 3, 6); e1 = pi - angle(3, 4, 6); e2 = pi - angle(4, 6, 3); e3 = pi - angle(6, 3, 4); f1 = pi - angle(3, 2, 4); f2 = pi - angle(2, 4, 3); f3 = pi - angle(4, 3, 2); stem = 3.9; stem defines the distance btw the lobes of the mandala r = 0.5; r is a scale factor R1 : T(-b3) L(r*3) T(-b1) [S(R2,1)] L(r*10); R2 : T(pi-c3) L(r*3) T(-c1) [S(R3,1)] L(r*8); R3 : T(pi-d3) L(r*3) T(-d1) [S(R4,1)] L(r*6); R4 : T(pi-e3) L(r*3) T(-e1) [S(R5,1)] L(r*4); R5 : T(pi-f3) L(r*3) T(-f1) L(r*2); L1 : T(b3) L(r*3) T(b1) [S(L2,1)] L(r*10); L2 : T(c3-pi) L(r*3) T(c1) [S(L3,1)] L(r*8); L3 : T(d3-pi) L(r*3) T(d1) [S(L4,1)] L(r*6); L4 : T(e3-pi) L(r*3) T(e1) [S(L5,1)] L(r*4); L5 : T(f3-pi) L(r*3) T(f1) L(r*2); LEAF: L(r*12) [S(R1,1)] [S(L1,1)]; ALL: P(8,6.5) T(a/4) [L(r*stem) S(LEAF,1)] T(a) [L(r*stem) S(LEAF,1)] T(a) [L(r*stem) S(LEAF,1)] T(a) [L(r*stem) S(LEAF,1)] T(a) [L(r*stem) S(LEAF,1)];
Command line
nell manda15.nll ALL 10 | nellsvg 16 14.5 cm 0.05 1 > manda15.svg
Program: (manda17.nll)
; Creates a mandala of square symmetry. a = 2*pi/5; b1 = pi - angle(3, 10, 12); b2 = pi - angle(10, 12, 3); b3 = pi - angle(12, 3, 10); c1 = pi - angle(3, 8, 10); c2 = pi - angle(8, 10, 3); c3 = pi - angle(10, 3, 8); d1 = pi - angle(3, 6, 8); d2 = pi - angle(6, 8, 3); d3 = pi - angle(8, 3, 6); e1 = pi - angle(3, 4, 6); e2 = pi - angle(4, 6, 3); e3 = pi - angle(6, 3, 4); f1 = pi - angle(3, 2, 4); f2 = pi - angle(2, 4, 3); f3 = pi - angle(4, 3, 2); stem = 3.9; stem defines the distance btw the lobes of the mandala r = 0.25; scale factor R1 : T(-b3) L(r*3) T(-b1) [S(R2,1)] L(r*10); R2 : T(pi-c3) L(r*3) T(-c1) [S(R3,1)] L(r*8); R3 : T(pi-d3) L(r*3) T(-d1) [S(R4,1)] L(r*6); R4 : T(pi-e3) L(r*3) T(-e1) [S(R5,1)] L(r*4); R5 : T(pi-f3) L(r*3) T(-f1) L(r*2); L1 : T(b3) L(r*3) T(b1) [S(L2,1)] L(r*10); L2 : T(c3-pi) L(r*3) T(c1) [S(L3,1)] L(r*8); L3 : T(d3-pi) L(r*3) T(d1) [S(L4,1)] L(r*6); L4 : T(e3-pi) L(r*3) T(e1) [S(L5,1)] L(r*4); L5 : T(f3-pi) L(r*3) T(f1) L(r*2); CORNERBL : P(1,1) [L(r*12) S(R1,1)] [T(pi/2) L(r*12) S(L1,1)]; CORNERBR : P(10,1) [T(pi) L(r*12) S(L1,1)] [T(pi/2) L(r*12) S(R1,1)]; CORNERTL : P(1,10) [T(-pi/2) L(r*12) S(R1,1)] [T(0) L(r*12) S(L1,1)]; CORNERTR : P(10,10) [T(pi) L(r*12) S(R1,1)] [T(-pi/2) L(r*12) S(L1,1)]; SQUARE : S(CORNERBL,1) S(CORNERBR,1) S(CORNERTL,1) S(CORNERTR,1); CENTRAL : T(pi/2) [S(R1,1)] [S(L1,1)]; CIRCLES : P(5.5,5.5) C(r*1) C(r*19) P(r*9+5.5,5.5) C(r*2) P(r*-9+5.5,5.5) C(r*2) P(5.5,r*9+5.5) C(r*2) P(5.5,r*-9+5.5) C(r*2) P(5.5,r*16+5.5) C(r*3) P(5.5,r*-16+5.5) C(r*3) P(r*16+5.5,5.5) C(r*3) P(r*-16+5.5,5.5) C(r*3); TOTAL : P(5.5,5.5) [S(SQUARE,1)] [T(pi/4) S(CENTRAL,4)] S(CIRCLES,1);
Command line
nell manda17.nll TOTAL 10 | nellsvg 11 11 cm 0.05 1 > manda17.svg
Program: (manda19.nll)
; A template for creating mandalas with triangles. L1 = 10; L1,L2,L3 = sides of triangles. L2 = 10; Note: Scaling the same triangle can make different mandalas. L3 = 10; d = 2.5; d = spacing between concentric triangles n1 = 4; n1 = number of concentric triangles n2 = 6; n2 = number of copies going around the circle l1 = L1; l2 = L2; l3 = L3; a1 = angle(l3,l1,l2); a2 = angle(l1,l2,l3); a3 = angle(l2,l3,l1); d1 = d/tan(a1/2); d2 = d/tan(a2/2); d3 = d/tan(a3/2); dm = d/sin(a1/2); a = 2*pi/n2; T1 : L(l1) T(pi-a2) L(l2) T(pi-a3) L(l3) T(pi-a1); PIC2 : S(T1,1) T(a1/2) M(dm) T(-a1/2) A(l1,l1-d1-d2) A(l2,l2-d2-d3) A(l3,l3-d1-d3); PIC3 : [S(PIC2,n1)] T(a) A(l1,L1) A(l2,L2) A(l3,L3); PIC4 : P(15,15) [S(PIC3,n2)] C(L3) C(1.5*L3);
Command line
nell manda19.nll PIC4 10 | nellsvg 30 30 mm 0.1 1 > manda19.svg
Program: (lonestar.nll)
; Produces a star-like figure using paralelograms. ; d = tile spacing ; d < 1 tiles overlap ; d = 1 exact tiling ; d > 1 tiles space apart a = pi/4; l = 0.4; d = 1.25*l; n = 4; T1 : L(l) T(a) L(l) T(3*a) L(l) T(a) L(l) T(3*a) M(d); T2 : [S(T1,n)] T(a) M(d) T(-a); T3 : [S(T2,n)] T(a); T4 : P(3.25,3.25) S(T3,8);
Command line
nell lonestar.nll T4 10 | nellsvg 6.5 6.5 in 0.02 1 > lonestar.svg
Program: (cross.nll)
; Creates a cross with an octagon at center. s = 1; "s" makes tips longer with increase. r = s; "r" makes junction side wider with increase. a = 2*pi/5; "a" makes tips more pointy with increase. t1 = 3*s; "t1" makes 3 arms longer with increase. ; b1 is angle of side near junction. b1 = acos((s/t1)*cos(a/2)-r/(2*t1)); c1 = pi-a/2-b1; "c1" is angle of side near point t2 = 5*s; t2,b2,c2 are long arm versions of t1,b1,c1 b2 = acos((s/t2)*cos(a/2)-r/(2*t2)); c2 = pi-a/2-b2; ; T1 is the 3 short arms, T2 is longer arm. T1 : L(r) T(-b1) L(t1) T(-c1) L(s) T(-a) L(s) T(-c1) L(t1) T(-b1); T2 : L(r) T(-b2) L(t2) T(-c2) L(s) T(-a) L(s) T(-c2) L(t2) T(-b2); T3 : L(s) T(pi/4); T3 is a side of octagon T4 : S(T3,8); T4 is octagon at junction ; T5 makes longer arm, T6 makes shorter arms. T5 : M((s-r)/2) S(T2,1) M((s+r)/2) T(pi/4) M(s) T(pi/4); T6 : M((s-r)/2) S(T1,1) M((s+r)/2) T(pi/4) M(s) T(pi/4); PIC : P(4.5,5.8) S(T4,1) S(T5,1) S(T6,3);
Command line
nell cross.nll PIC 6 | nellsvg 10 12 cm 0.05 1 > cross.svg