diff options
Diffstat (limited to 'Master/texmf-dist/doc/metapost/featpost/example/hap.mp')
-rw-r--r-- | Master/texmf-dist/doc/metapost/featpost/example/hap.mp | 137 |
1 files changed, 137 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/metapost/featpost/example/hap.mp b/Master/texmf-dist/doc/metapost/featpost/example/hap.mp new file mode 100644 index 00000000000..269cc6ab682 --- /dev/null +++ b/Master/texmf-dist/doc/metapost/featpost/example/hap.mp @@ -0,0 +1,137 @@ +% hap.mp +% L. Nobre G. +% IYP (2005) + +numeric HalfSideLength; +numeric ThicknesFactor, BorderThFactor; + +HalfSideLength = 6mm; +ThicknesFactor = 0.5; +BorderThFactor = 1.85; % Borders over TraceThickness + +def PickInteger( expr MaxNum ) = floor( uniformdeviate( MaxNum+1 ) ) enddef; + +def PickColor = + begingroup + numeric c[], i, min, max, ref; + ref = 0.76; + for i=1 upto 3: + c[i] = uniformdeviate(1); + endfor; + min = c1; + max = c1; + for i=2 upto 3: + if c[i] < min: min := c[i]; fi; + if c[i] > max: max := c[i]; fi; + endfor; + for i=1 upto 3: + c[i] := ref+(0.94-ref)*(c[i]-min)/(max-min); + endfor; + ( ( c1 , c2, c3 ) ) + endgroup +enddef; + +vardef LocateIndex[] = + dotlabel.urt( str @, z@ ) +enddef; + +beginfig(1); + numeric tracethickness, i, j, hexconst, angaux, cou, nupersi; + numeric ThisInd, ThatInd, dist[], ang[]; + color TheColor; + pen tracepen, bordepen; + path hexpath, ActualPath, FinalCut; + pair corn[], nco, aco, vec, Dir[], urCorner, ulCorner, llCorner, lrCorner; + boolean Filled[]; + picture Tile[]; + hexconst = sqrt(3)/2; + nupersi = PickInteger( 2 ); + tracethickness = ThicknesFactor* + (0.5+uniformdeviate(0.5))* + HalfSideLength/(nupersi+1); + TheColor = PickColor; + tracepen = pencircle scaled tracethickness; + bordepen = tracepen scaled BorderThFactor; + for i=0 upto 6: + corn[i] = 2*HalfSideLength*dir(i*60); + endfor; + hexpath = corn0--corn1--corn2--corn3--corn4--corn5--cycle; + dist0 = 0; + ang0 = 40+uniformdeviate( 100 ); + for i=1 upto nupersi: + dist[i] = dist[i-1]+(0.7+uniformdeviate(0.45))*HalfSideLength/(nupersi+1); + angaux := 40+20*i/nupersi; + ang[i] = angaux + uniformdeviate( 180-2*angaux ); + endfor; + for i=0 upto 5: + aco := corn[i]; + nco := corn[1+i]; + vec := nco-aco; + z[i] = aco+0.5*vec; + Dir[i] = dir(angle(vec)+ang0); + Filled[i] = false; + endfor; + cou = 5; + for i=0 upto 5: + aco := corn[i]; + nco := corn[i+1]; + vec := unitvector(nco-aco); + for j=1 upto nupersi: + cou := incr( cou ); + z[cou] = 0.5[aco,nco]+dist[j]*vec; + Dir[cou] = dir(angle(vec)+ang[j]); + Filled[cou] = false; + cou := incr( cou ); + z[cou] = 0.5[aco,nco]-dist[j]*vec; + Dir[cou] = dir(angle(vec)+ang[j]); + Filled[cou] = false; + endfor; + endfor; +% for i=0 upto cou: +% LocateIndex[i]; +% endfor; + for i=1 step 2 until cou: + forever: + ThisInd := PickInteger( cou ); + exitunless Filled[ThisInd]; + endfor; + Filled[ThisInd] := true; + forever: + ThatInd := PickInteger( cou ); + exitunless Filled[ThatInd]; + endfor; + Filled[ThatInd] := true; + ActualPath := z[ThisInd]{Dir[ThisInd]} + ...z[ThatInd]{-Dir[ThatInd]}; + draw ActualPath withcolor background withpen bordepen; + draw ActualPath withcolor TheColor withpen tracepen; + endfor; + clip currentpicture to hexpath; + urCorner = ( 8.13in, 11.533in ); + llCorner = ( 0.118in, 35.5bp ); + ulCorner = ( xpart llCorner, ypart urCorner ); + lrCorner = ( xpart urCorner, ypart llCorner ); + FinalCut = urCorner--ulCorner--llCorner--lrCorner--cycle; + for i=0 upto 5: + Tile[i] = currentpicture rotated (i*60); + endfor; + currentpicture := nullpicture; + numeric j, horizo, vertic, vertigo; + horizo = ( xpart urCorner ) + 2HalfSideLength; + vertic = ( ypart urCorner ) + 2HalfSideLength; + vertigo = 0.5*horizo; + pair paird, pairv; + pairv = up*4*HalfSideLength*hexconst; + paird = dir(30)*4*HalfSideLength*hexconst; + numeric numd, numv; + numv = (vertic+2*vertigo)/(4*HalfSideLength*hexconst); + numd = horizo/(3*HalfSideLength); + for i = 0 upto numd: + for j = 0 upto numv: + draw Tile[PickInteger( 5 )] shifted ( (0,-vertigo) + i*paird + j*pairv ); + endfor; + endfor; + clip currentpicture to FinalCut; +endfig; + +end. |