diff options
Diffstat (limited to 'Master/texmf-dist/doc/metapost/featpost/example/iamsorrykarl.mp')
-rw-r--r-- | Master/texmf-dist/doc/metapost/featpost/example/iamsorrykarl.mp | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/metapost/featpost/example/iamsorrykarl.mp b/Master/texmf-dist/doc/metapost/featpost/example/iamsorrykarl.mp new file mode 100644 index 00000000000..7e233047c44 --- /dev/null +++ b/Master/texmf-dist/doc/metapost/featpost/example/iamsorrykarl.mp @@ -0,0 +1,94 @@ +% iamsorrykarl.mp +% 2006 +% L. Nobre G. + +%input featpost3Dplus2D; + +% bash: export TEX=latex +% tcsh: setenv TEX latex + +prologues := 1; + +beginfig(1); + numeric u, nstripes, aspecratio, minskip, maxskip, shiftlim, shiftmin; + numeric nbreaks, i, j, ymax, shiftx, lefh, righ, actualx, newx; + numeric prevlefh, prevrigh, xmax, auxan, auxr, cdiam; + path lefp[], rigp[], strp[]; + pair shif, reflef, refrig, auxa, auxb; + boolean exitcondition; + u = 1cm; + nstripes = 7; + aspecratio = 1.7; + minskip = 0.5u; % must not be too small + maxskip = 4u; + shiftlim = 0.7u; + shiftmin = 0.25u; + cdiam = 0.65u; + xmax = (2*nstripes-1)*u; + ymax = aspecratio*xmax; + prevlefh = ymax; + prevrigh = ymax; + actualx = u; + for i=1 upto nstripes: + lefp[i] = ((2*i-1)*u,ymax); + rigp[i] = ((2*i-1)*u,ymax)--(2*i*u,ymax); + endfor; + exitcondition = false; + forever: + auxr := uniformdeviate(2)-1; + if auxr > 0: + newx := actualx + shiftmin + (shiftlim-shiftmin)*auxr; + else: + newx := actualx - shiftmin + (shiftlim-shiftmin)*auxr; + fi; + lefh := prevlefh - minskip - uniformdeviate(maxskip-minskip); + righ := prevrigh - minskip - uniformdeviate(maxskip-minskip); + if lefh < minskip: + lefh := minskip; + exitcondition := true; + fi; + if righ < minskip: + righ := minskip; + exitcondition := true; + fi; + reflef := (newx,lefh); + refrig := (newx+xmax,righ); + auxan := angle(refrig-reflef); + shif := (newx-actualx)*(1,sind(auxan)/cosd(auxan)); + for i=1 upto nstripes: + auxa := point (length lefp[i]) of lefp[i]; + auxb := point (length rigp[i]) of rigp[i]; + pair poil, poir; + poil = auxa+whatever*down; + poil = whatever[reflef,refrig]; + poir = auxb+whatever*down; + poir = whatever[reflef,refrig]; + lefp[i] := lefp[i]--poil--(poil+shif); + rigp[i] := rigp[i]--poir--(poir+shif); + endfor; + actualx := newx; + prevlefh := lefh; + prevrigh := righ; + exitif exitcondition; + endfor; + for i=1 upto nstripes: + auxa := point (length lefp[i]) of lefp[i]; + auxb := point (length rigp[i]) of rigp[i]; + pair poil, poir; + poil = auxa+whatever*down; + poil = whatever[origin,right]; + poir = auxb+whatever*down; + poir = whatever[origin,right]; + lefp[i] := lefp[i]--poil--poir; + rigp[i] := rigp[i]--poir; + strp[i] = buildcycle( lefp[i], reverse rigp[i] ); + fill strp[i] withcolor red; + endfor; +% for i=nstripes+1 upto nstripes+50: +% strp[i] = fullcircle scaled cdiam shifted +% (uniformdeviate(xmax),uniformdeviate(ymax)); +% fill strp[i]; +% endfor; +endfig; + +end.
\ No newline at end of file |