{VERSION 3 0 "APPLE_PPC_MAC" "3.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 11 12 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 12004 "gdata:=proc(n) lo cal gplusone, firstrand;\n#n is an integer >=2 gdata encodes standard \+ groves of order n in an upper triangular (2k-1) by (2k-1) matrix.\n\ng plusone:= proc(l,n) local m,j,i,ii,jj,kk,x,y,flip,r;\n#takes an array \+ encoding of triangles of type s,t and generates a bigger array of #tri angles of type s,t. The array l has k^2 nonempty terms where k is the order of #the grove.\n\nflip:=proc(t) local r;\n#changes downward tri angle t into upward triangle s of the proper type\nr:=rand(1..3);\nif \+ t = 1 then 14+r(); \nelif member(t, \{5,6,7\}) then 11;\nelif member(t , \{2,3,4\}) then t+10;\nelse 0\nfi;\nend;\n\nif n = 1 then\nr:=rand(1 ..3);\n\nfirstrand:=proc(k) local l;\nif k = 1 then l:=array(1..3,1..3 ,[[4,0,1],[0,16,0],[0,0,2]])\nelif k =2 then l:=array(1..3,1..3,[[1,0, 3],[0,15,0],[0,0,2]])\nelse l:=array(1..3,1..3,[[4,0,3],[0,17,0],[0,0, 1]])\nfi;\nend;\n\nm:=firstrand(r());\n\nfi;\n\nif n > 2 then\n\nm:= a rray(1..(n+2),1..(n+2));\n\nfor i from 1 to n+2 do\nfor j from 1 to n+ 2 do\nm[i,j] := 0;\nod;\nod;\n\nfor i from 1 to (n+1)/2 do\nfor j from i to (n+1)/2 do\nm[2*i,2*j]:=flip(l[2*i-1,2*j-1]);\nod;\nod;\n\nif me mber(m[2,2], \{14,16,17\}) then m[1,1]:=4\n else m[1,1] := 1 fi;\n\nif member( m[2,n+1], \{13,15,17\}) then m[1,n+2] := 3\n else m[1,n+2] := 1 fi;\n\nif member( m[n+1,n+1], \{12,15,16\}) then m[n+2,n+2] := 2 \n else m[n+2,n+2] := 1 fi;\n\n#this loop does the top row minus ends\nfo r ii from 1 to (n-1)/2 do\nif member( m[2,2*ii], \{11,12,14,16\}) and \+ \n member( m[2,2*ii+2], \{14,16,17\}) then m[1,2*ii+1] := 4\nelif memb er( m[2,2*ii], \{11,12,14,16\}) and member( m[2,2*ii+2], \{11,13,12,15 \}) then m[1,2*ii +1] := 1\nelif member( m[2,2*ii], \{13,15,17\}) and \+ member( m[2,2*ii + 2], \{14,16,17\}) then m[1,2*ii+1] := 7\nelse m[1,2 *ii +1] := 3\nfi; \nod;\n\n#this does the diagonal minus ends\nfor jj \+ from 1 to (n-1)/2 do\nif member( m[2*jj,2*jj], \{11,13,14,17\}) and\nm ember( m[2*jj +2, 2*jj+2], \{14,16,17\}) then m[2*jj+1,2*jj+1] := 4\ne lif member( m[2*jj,2*jj], \{11,13,14,17\}) and member( m[2*jj+2,2*jj+2 ], \{11,13,12,15\}) then m[2*jj+1, 2*jj+1] := 1\nelif member( m[2*jj,2 *jj], \{12,15,16\}) and member( m[2*jj+2,2*jj+2], \{14,16,17\}) then m [2*jj+1,2*jj+1] := 6\nelse m[2*jj+1,2*jj+1] := 2\nfi;\nod;\n\n#this do es the right side minus ends\nfor kk from 1 to (n-1)/2 do\nif member( \+ m[2*kk,n+1], \{11,13,14,17\}) and\nmember( m[2*kk +2, n+1], \{13,15,17 \}) then m[2*kk+1,n+2] := 3\nelif member( m[2*kk,n+1], \{11,13,14,17\} ) and member( m[2*kk+2,n+1], \{11,12,14,16\}) then m[2*kk+1, n+2] := 1 \nelif member( m[2*kk,n+1], \{12,15,16\}) and member( m[2*kk+2,n+1], \+ \{15,13,17\}) then m[2*kk+1,n+2] := 5\nelse m[2*kk+1,n+2] := 2\nfi;\no d;\n\nfi;\n\n#this does the interior\nif n > 3 then\nfor x from 1 to ( n-3)/2 do\n for y from x+1 to (n-1)/2 do\nif member( m[2*x,2*y], \{11, 13,14,17\}) and\n member( m[2*x+2, 2*y], \{11,14,12,16\}) and \n membe r( m[2*x+2,2*y+2], \{11,12,13,15\}) then m[2*x+1,2*y+1] := 1\nelif mem ber( m[2*x,2*y], \{11,13,14,17\}) and\n member( m[2*x+2, 2*y], \{11,14 ,12,16\}) and \n member( m[2*x+2,2*y+2], \{14,16,17\}) then m[2*x+1,2* y+1] := 4\nelif member( m[2*x,2*y], \{11,13,14,17\}) and\n member( m[2 *x+2, 2*y], \{17,15,13\}) and \n member( m[2*x+2,2*y+2], \{16,17,14\}) then m[2*x+1,2*y+1] := 7\nelif member( m[2*x,2*y], \{11,13,14,17\}) a nd\n member( m[2*x+2, 2*y], \{13,15,17\}) and \n member( m[2*x+2,2*y+2 ], \{11,12,13,15\}) then m[2*x+1,2*y+1] := 3\nelif member( m[2*x,2*y], \{12,15,16\}) and\n member( m[2*x+2, 2*y], \{13,15,17\}) and \n membe r( m[2*x+2,2*y+2], \{11,12,13,15\}) then m[2*x+1,2*y+1] := 5\nelif mem ber( m[2*x,2*y], \{12,15,16\}) and\n member( m[2*x+2, 2*y], \{11,14,12 ,16\}) and \n member( m[2*x+2,2*y+2], \{14,16,17\}) then m[2*x+1, 2*y+ 1] := 6\nelse m[2*x+1,2*y+1] := 2\nfi;\nod;\nod;\nfi;\n\nm;\nend;\n\ni f n = 2 then gplusone([1],1)\nelse gplusone(gdata(n-1),2*n-3)\nfi;\nen d:\n\ntrans:=proc(i,j);\n#transforms the ij th entry into x,y coordina tes \n(j-.5*i, 1-1/(2*sqrt(3))-(sqrt(3)/2)*(i-1) )\nend:\n\nhexdraw:=p roc(n,m) local cord, k, l, ll, kk, lll, llll, i, j;\n#m is the data fo r a grove of order n, call ld(n, gdata(n))\ncord:=proc(x,y);\n#cord ge ts coordinates for the corners of a hexagon centered at x,y of \n[[x-1 /2,y+1/(2*sqrt(3))],[x,y+1/sqrt(3)],[x+1/2,y+1/(2*sqrt(3))],[x+1/2,y-1 /(2*sqrt(3))],[x,y-1/sqrt(3)],[x-1/2,y-1/(2*sqrt(3))]];\nend;\n\nk:=0: \nl:=0:\nll:=0:\nkk:=0:\nlll:=0:\nllll:=0:\n\nfor i from 1 to n do\nfo r j from i to n do\nif m[2*i-1,2*j-1] = 4 then k:=k+1: p.k := evalf(co rd(trans(i,j)));\nelif m[2*i-1,2*j-1] = 3 then l:=l+1: q.l := evalf(co rd(trans(i,j)));\nelif m[2*i-1,2*j-1] = 2 then ll:= ll+1: r.ll := eval f(cord(trans(i,j)));\nelif m[2*i-1,2*j-1] = 7 then kk:= kk+1: pq.kk := evalf(cord(trans(i,j)));\nelif m[2*i-1,2*j-1] = 6 then lll:= lll+1: p r.lll := evalf(cord(trans(i,j)));\nelif m[2*i-1,2*j-1] = 5 then llll:= llll+1: qr.llll := evalf(cord(trans(i,j)));\nfi;\nod;\nod; \n\nPLOT( \+ POLYGONS( seq(p.i, i=1..k), COLOR(RGB,1,0,0) , STYLE(PATCHNOGRID)), PO LYGONS( seq(q.i, i=1..l),COLOR(RGB,0,1,0), STYLE(PATCHNOGRID) ), POLYG ONS( seq(r.i, i=1..ll),COLOR(RGB,0,0,1) , STYLE(PATCHNOGRID)), POLYGO NS( seq(pq.i, i=1..kk),COLOR(RGB,.7,.7,0), STYLE(PATCHNOGRID) ),POLYG ONS( seq(pr.i, i=1..lll),COLOR(RGB,.7,0,.7) , STYLE(PATCHNOGRID) ),POL YGONS( seq(qr.i, i=1..llll),COLOR(RGB,0,.7,.7), STYLE(PATCHNOGRID) ), AXESSTYLE(NONE), SCALING(CONSTRAINED) );\nend:\n\ntridraw:=proc(n,m) \+ local cord, trans1, k, l, kk, ll, lll, llll, i,j;\n#m is the data for \+ a grove of order n, call td(n, gdata(n))\ncord:=proc(x,y,st);\n#cord g ets coordinates for the corners of a triangle centered at x,y of type \+ s or t \nif st = t then\n[[x-1/2,y+1/(2*sqrt(3))],[x+1/2,y+1/(2*sqrt(3 ))],[x,y-1/sqrt(3)]];\nelse [[x-1/2,y-1/(2*sqrt(3))],[x+1/2,y-1/(2*sqr t(3))],[x,y+1/sqrt(3)]];\nfi;\nend;\n\ntrans1:=proc(i,j);\n#transforms the ij th entry into x,y coordinates (for s type only)\n(j-.5*i+.5, 1 -1/sqrt(3)-(sqrt(3)/2)*(i-1) )\nend;\n\n#need to send all the 4,14 ent ries to p.i, all the 3,13 entries to q.i, and all the 2,12 entries to \+ r.i\n\nk:=0:\nl:=0:\nll:=0:\nkk:=0:\nlll:=0:\nllll:=0:\n\nfor i from 1 to n do\nfor j from i to n do\nif m[2*i-1,2*j-1] = 4 then k:=k+1: p.k := evalf(cord(trans(i,j),t));\nelif m[2*i-1,2*j-1] = 3 then l:=l+1: q .l := evalf(cord(trans(i,j),t));\nelif m[2*i-1,2*j-1] = 2 then ll:= ll +1: r.ll := evalf(cord(trans(i,j),t));\nelif m[2*i-1,2*j-1] = 7 then k k:= kk+1: pq.kk := evalf(cord(trans(i,j),t));\nelif m[2*i-1,2*j-1] = 6 then lll:= lll+1: pr.lll := evalf(cord(trans(i,j),t));\nelif m[2*i-1, 2*j-1] = 5 then llll:= llll+1: qr.llll := evalf(cord(trans(i,j),t));\n fi;\nod;\nod; \n\nfor i from 1 to n-1 do\nfor j from i to n-1 do\n\nif m[2*i,2*j] = 14 then k:=k+1: p.k:=evalf(cord(trans1(i,j),s));\nelif m [2*i,2*j] = 13 then l:=l+1: q.l := evalf(cord(trans1(i,j),s));\nelif m [2*i,2*j] = 12 then ll:=ll+1: r.ll := evalf(cord(trans1(i,j),s));\neli f m[2*i,2*j] = 17 then kk:=kk+1: pq.kk := evalf(cord(trans1(i,j),s)); \nelif m[2*i,2*j] = 16 then lll:=lll+1: pr.lll := evalf(cord(trans1(i, j),s));\nelif m[2*i,2*j] = 15 then llll:=llll+1: qr.llll := evalf(cord (trans1(i,j),s));\nfi;\nod;\nod;\n\n#seq(p.i, i=1..k);\n\nPLOT( POLYGO NS( seq(p.i, i=1..k), COLOR(RGB,1,0,0) ), POLYGONS( seq(q.i, i=1..l),C OLOR(RGB,0,1,0) ), POLYGONS( seq(r.i, i=1..ll),COLOR(RGB,0,0,1) ), PO LYGONS( seq(pq.i, i=1..kk),COLOR(RGB,.7,.7,0) ),POLYGONS( seq(pr.i, i =1..lll),COLOR(RGB,.7,0,.7) ),POLYGONS( seq(qr.i, i=1..llll),COLOR(RG B,0,.7,.7) ), STYLE(PATCHNOGRID), AXESSTYLE(NONE), SCALING(CONSTRAINE D) );\nend:\n\nlinedraw:=proc(n,m) local cord2, cord3, cord4, cord5, c ord6, cord7, k, l, ll, kk, lll, llll, i, j;\n#m is the data for a grov e of order n, call ld(n, gdata(n))\ncord2:=proc(x,y);\n[[x+.5,y+1/(2*s qrt(3))],[x-1/2,y+1/(2*sqrt(3))]];\nend;\n\ncord3:=proc(x,y);\n[[x-.5, y+1/(2*sqrt(3))],[x,y-1/sqrt(3)]];\nend;\n\ncord4:=proc(x,y);\n[[x+.5, y+1/(2*sqrt(3))],[x,y-1/sqrt(3)]];\nend;\n\ncord5:=proc(x,y);\n[[x+.5, y+1/(2*sqrt(3))],[x-.5,y+1/(2*sqrt(3))],[x,y-1/sqrt(3)]];\nend;\n\ncor d6:=proc(x,y);\n[[x-.5,y+1/(2*sqrt(3))],[x+.5,y+1/(2*sqrt(3))],[x,y-1/ sqrt(3)]];\nend;\n\ncord7:=proc(x,y);\n[[x-.5,y+1/(2*sqrt(3))],[x,y-1/ sqrt(3)],[x+.5,y+1/(2*sqrt(3))]];\nend;\n\nk:=0:\nl:=0:\nll:=0:\nkk:=0 :\nlll:=0:\nllll:=0:\n\nfor i from 1 to n do\nfor j from i to n do\nif m[2*i-1,2*j-1] = 4 then k:=k+1: p.k := evalf(cord4(trans(i,j)));\neli f m[2*i-1,2*j-1] = 3 then l:=l+1: q.l := evalf(cord3(trans(i,j)));\nel if m[2*i-1,2*j-1] = 2 then ll:= ll+1: r.ll := evalf(cord2(trans(i,j))) ;\nelif m[2*i-1,2*j-1] = 7 then kk:= kk+1: pq.kk := evalf(cord7(trans( i,j)));\nelif m[2*i-1,2*j-1] = 6 then lll:= lll+1: pr.lll := evalf(cor d6(trans(i,j)));\nelif m[2*i-1,2*j-1] = 5 then llll:= llll+1: qr.llll \+ := evalf(cord5(trans(i,j)));\nfi;\nod;\nod; \n\nPLOT( CURVES( seq(p.i, i=1..k), COLOR(RGB,1,0,0) ), CURVES( seq(q.i, i=1..l),COLOR(RGB,0,1,0 ) ), CURVES( seq(r.i, i=1..ll),COLOR(RGB,0,0,1) ), CURVES( seq(pq.i, \+ i=1..kk),COLOR(RGB,.7,.7,0) ),CURVES( seq(pr.i, i=1..lll),COLOR(RGB,. 7,0,.7) ),CURVES( seq(qr.i, i=1..llll),COLOR(RGB,0,.7,.7)), AXESSTYLE (NONE), SCALING(CONSTRAINED) );\n\nend:\n\nrhomdraw:=proc(n,m) local c ord1, cord2, cord3, k, l, ll, kk, lll, llll, i, j, p, q, r, pq, pr, qr ;\n#m is the data for a grove of order n, call rd(n, gdata(n))\n\ncord 1:=proc(x,y);\n#cord gets coordinates for the corners of a 'top' rhomb us with bottom x,y \n[[x-1/2,y+1/(2*sqrt(3))],[x,y+1/sqrt(3)],[x+1/2,y +1/(2*sqrt(3))],[x,y]];\nend;\n\ncord2:=proc(x,y);\n#cord gets coordin ates for the corners of a 'left' rhombus with upper right corner x,y \+ \n[[x-1/2,y+1/(2*sqrt(3))],[x,y],[x,y-1/sqrt(3)],[x-.5,y-1/(2*sqrt(3)) ]];\nend;\n\ncord3:=proc(x,y);\n#cord gets coordinates for the corners of a 'right' rhombus with upper left corner x,y \n[[x+1/2,y+1/(2*sqrt (3))],[x,y],[x,y-1/sqrt(3)],[x+.5,y-1/(2*sqrt(3))]];\nend;\n\nk:=0:\nl :=0:\nll:=0:\nkk:=0:\nlll:=0:\nllll:=0:\n\nfor i from 1 to n do\nfor j from i to n do\nif m[2*i-1,2*j-1] = 4 then k:=k+1: p.k := evalf(cord3 (trans(i,j))): kk:=kk+1: pq.kk := evalf(cord1(trans(i,j))): lll:=lll+1 : pr.lll:= evalf(cord2(trans(i,j)));\nelif m[2*i-1,2*j-1] = 3 then l:= l+1: q.l := evalf(cord2(trans(i,j))): kk:=kk+1: pq.kk:=evalf(cord1(tra ns(i,j))): llll:=llll+1: qr.llll := evalf(cord3(trans(i,j)));\nelif m[ 2*i-1,2*j-1] = 2 then ll:= ll+1: r.ll := evalf(cord1(trans(i,j))): lll :=lll+1: pr.lll:=evalf(cord2(trans(i,j))): llll:=llll+1: qr.llll:= eva lf(cord3(trans(i,j)));\nelif m[2*i-1,2*j-1] = 7 then k:= k+1: p.k := e valf(cord3(trans(i,j))): l:=l+1: q.l:=evalf(cord2(trans(i,j))): kk:=kk +1: pq.kk:=evalf(cord1(trans(i,j)));\nelif m[2*i-1,2*j-1] = 6 then k:= k+1: p.k := evalf(cord3(trans(i,j))): ll:=ll+1: r.ll:=evalf(cord1(tra ns(i,j))): lll:=lll+1: pr.lll:=evalf(cord2(trans(i,j)));\nelif m[2*i-1 ,2*j-1] = 5 then l:= l+1: q.l := evalf(cord2(trans(i,j))): ll:=ll+1: r .ll:=evalf(cord1(trans(i,j))): llll:=llll+1: qr.llll:=evalf(cord3(tran s(i,j)));\nelif m[2*i-1, 2*j-1] = 1 then kk:=kk+1: pq.kk:=evalf(cord1( trans(i,j))): lll:=lll+1: pr.lll:= evalf(cord2(trans(i,j))): llll:=lll l+1: qr.llll:=evalf(cord3(trans(i,j)));\nfi;\nod;\nod; \n\nPLOT( POLYG ONS( seq(p.i, i=1..k), COLOR(RGB,1,1,1) , STYLE(PATCHNOGRID)), POLYGON S( seq(q.i, i=1..l),COLOR(RGB,0,1,0), STYLE(PATCHNOGRID) ), POLYGONS( \+ seq(r.i, i=1..ll),COLOR(RGB,1,1,1) , STYLE(PATCHNOGRID)), POLYGONS( s eq(pq.i, i=1..kk),COLOR(RGB,1,1,1), STYLE(PATCHNOGRID) ),POLYGONS( se q(pr.i, i=1..lll),COLOR(RGB,1,1,1) , STYLE(PATCHNOGRID) ),POLYGONS( se q(qr.i, i=1..llll),COLOR(RGB,1,1,1), STYLE(PATCHNOGRID) ), AXESSTYLE( NONE), SCALING(CONSTRAINED) );\nend:\n\nboundata:=proc(n,m) local i,ii , j,jj,k,kk,l;\n\nl:=array(1..2*n-1,1..2*n-1);\nfor jj from 1 to 2*n-1 do\nfor k from 1 to 2*n-1 do\nl[jj,k]:=m[jj,k];\nod;\nod;\n\nfor i fr om 1 to n do\nfor j from 1 to n do\nif member(m[2*i-1,2*j-1], \{0,1,2, 4,5,6,7\}) then\n for ii from i to n do\n for kk from 1 to j do\n l[2* ii-1,2*kk-1]:=0;\n od;\n od;\nfi;\nod;\nod;\nl;\nend;\n\nydraw:=proc(n ,m) local cord, k, l, ll, kk, lll, llll, i, j;\n#m is the data for a g rove of order n, call yd(n, gdata(n))\n\ncord:=proc(x,y);\n#cord gets \+ coordinates for the corners of a square centered at x,y of \n[[x-1/2,y +1/2],[x+1/2,y+1/2],[x+1/2,y-1/2],[x-1/2,y-1/2]];\nend;\n\nk:=0:\n\nfo r i from 1 to n do\nfor j from i to n do\nif m[2*i-1,2*j-1] = 3 then k :=k+1: p.k := evalf(cord(i,j));\nfi;\nod;\nod; \n\nPLOT( POLYGONS( seq (p.i, i=1..k), COLOR(RGB,0,1,0) , STYLE(PATCH)), AXESSTYLE(NONE), SCA LING(CONSTRAINED) );\nend:" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%)bound ataGR6$%\"nG%\"mG6)%\"iG%#iiG%\"jG%#jjG%\"kG%#kkG%\"lG6\"F1C&>8*-%&arr ayG6$;\"\"\",&9$\"\"#!\"\"F9F8?(8'F9F9F:%%trueG?(8(F9F9F:F@>&F46$F?FB& 9%FE?(8$F9F9F;F@?(8&F9F9F;F@@$-%'memberG6$&FG6$,&FIF&F46$,&FenF " 0 "" {MPLTEXT 1 0 20 "yd raw(50,gdata(50));" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 13 "a:=gd ata(25);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"aG%\"mG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 15 "rhomdraw(15,a);" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 38 "ydraw(25,boundata(25,a));\nydraw(25,a);" }} }{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 10 "print(); " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 20 "ydraw(70,gdata(70));" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "0 0 0" 11471 } {VIEWOPTS 1 1 0 1 1 1803 }