diff options
Diffstat (limited to 'Master/texmf-dist/doc/metapost/featpost/example/cmykropes.mp')
-rw-r--r-- | Master/texmf-dist/doc/metapost/featpost/example/cmykropes.mp | 287 |
1 files changed, 287 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/metapost/featpost/example/cmykropes.mp b/Master/texmf-dist/doc/metapost/featpost/example/cmykropes.mp new file mode 100644 index 00000000000..ee99d874568 --- /dev/null +++ b/Master/texmf-dist/doc/metapost/featpost/example/cmykropes.mp @@ -0,0 +1,287 @@ +% cmykropes.mp +% L. Nobre G. +% 2006 + +input featpost3Dplus2D; + +% bash: export TEX=latex +% tcsh: setenv TEX latex + +verbatimtex +\documentclass{article} +\usepackage{palatino,mathpazo} +\begin{document} +etex + +Spread := 39; +f := 3*(3,5,4); + +color ki[]t[]; +numeric inum, icen, bnum, knum, frame, keytime, maxtetradimstep, atime; +inum = 18; +icen = 9; +bnum = inum*8; +knum = 5; +maxtetradimstep = 0.2; +atime = 4.5; + +ki0t0 = (-6.6,2.0,0.3); +ki1t0 = (-5.3,1.5,0.0); +ki2t0 = (-2.3,1.0,-0.4); +ki3t0 = (-0.5,0.6,0.8); +ki4t0 = (0.3,-0.2,-0.4); +ki5t0 = (0.9,-0.2,-1.1); +ki6t0 = (0.9,1.8,-0.6); +ki7t0 = (-0.4,1.8,0.4); +ki8t0 = (-0.4,0.3,-0.2); +ki9t0 = (0.3,-6.0,0.1); +ki10t0 = (5.7,-5.5,0.6); +ki11t0 = (5.8,0.9,0.6); +ki12t0 = (1.6,1.2,0.4); +ki13t0 = (0.1,1.1,-0.6); +ki14t0 = (-2.4,1.4,0.3); +ki15t0 = (-2.4,0.0,0.1); +ki16t0 = (0.2,0.3,-0.9); +ki17t0 = (1.6,0.3,0.3); +ki18t0 = (3.9,0.4,0.4); + +ki0t1 = (-6.6,2.0,0.3); +ki1t1 = (-5.3,1.5,0.0); +ki2t1 = (-2.3,1,-0.4); +ki3t1 = (-0.5,0.6,0.8); +ki4t1 = (0.3,-0.2,-0.4); +ki5t1 = (0.9,-0.2,-1.1); +ki6t1 = (0.9,1.8,-0.6); +ki7t1 = (-0.4,1.8,0.4); +ki8t1 = (-0.4,0.3,-0.2); +ki9t1 = (0.3,-6.0,0.1); +ki10t1 = (5.7,-5.5,0.6); +ki11t1 = (5.8,0.9,0.6); +ki12t1 = (1.6,1.2,0.4); +ki13t1 = (0.1,1.1,-0.6); +ki14t1 = (-2.4,1.8,0.3); +ki15t1 = (-5.4,2.0,0.3); +ki16t1 = (-7.2,2.2,0.3); +ki17t1 = (-8.6,2.4,0.3); +ki18t1 = (-9.9,2.8,0.4); + +ki0t2 = (-6.6,2,0.3); +ki1t2 = (-5.3,1.5,0.0); +ki2t2 = (-2.3,1.0,-0.4); +ki3t2 = (-0.5,0.6,0.8); +ki4t2 = (0.3,-0.2,-0.4); +ki5t2 = (0.9,-0.2,-1.1); +ki6t2 = (0.9,1.8,-0.6); +ki7t2 = (-0.4,1.8,0.4); +ki8t2 = (-0.4,0.3,-0.2); +ki9t2 = (0.3,-6.0,0.1); +ki10t2 = (5.7,-5.5,0.6); +ki11t2 = (5.8,0.9,0.6); +ki12t2 = (1.6,1.2,0.4); +ki13t2 = (0.1,1.1,-0.6); +ki14t2 = (-2.4,1.8,0.3); +ki15t2 = (-5.4,1.4,0.3); +ki16t2 = (-5.2,1,0.4); +ki17t2 = (-3.6,0.8,0.4); +ki18t2 = (-2.4,0.8,0.4); + +ki0t3 = (-6.6,2,0.3); +ki1t3 = (-5.3,1.5,0.0); +ki2t3 = (-2.3,1.0,-0.4); +ki3t3 = (-0.5,0.6,0.8); +ki4t3 = (0.3,-0.2,-0.4); +ki5t3 = (0.9,-0.2,-1.1); +ki6t3 = (0.9,1.8,-0.6); +ki7t3 = (-0.4,1.8,0.4); +ki8t3 = (-0.4,0.3,-0.2); +ki9t3 = (0.3,-6.0,0.1); +ki10t3 = (5.7,-5.5,0.6); +ki11t3 = (5.8,0.9,0.6); +ki12t3 = (1.6,1.2,0.4); +ki13t3 = (0.1,1.1,-0.6); +ki14t3 = (-2.4,1.8,0.3); +ki15t3 = (-3.4,1.4,0.3); +ki16t3 = (-2.4,0.8,0.3); +ki17t3 = (0.1,0.8,-0.6); +ki18t3 = (1.6,0.8,0.4); + +ki0t4 = (-6.6,2,0.3); +ki1t4 = (-5.3,1.5,0.0); +ki2t4 = (-2.3,1.0,-0.4); +ki3t4 = (-0.5,0.6,0.8); +ki4t4 = (0.3,-0.2,-0.4); +ki5t4 = (0.9,-0.2,-1.1); +ki6t4 = (0.9,1.8,-0.6); +ki7t4 = (-0.4,1.8,0.4); +ki8t4 = (-0.4,0.3,-0.2); +ki9t4 = (0.3,-6.0,0.1); +ki10t4 = (5.7,-5.5,0.6); +ki11t4 = (5.8,0.9,0.6); +ki12t4 = (1.6,1.2,0.4); +ki13t4 = (0.1,1.1,-0.6); +ki14t4 = (-2.4,1.8,0.3); +ki15t4 = (-2.4,0.8,0.3); +ki16t4 = (0.1,0.8,-0.6); +ki17t4 = (1.6,0.8,0.4); +ki18t4 = (5.0,0.8,0.4); + +ki0t5 = (-6.6,2,0.3); +ki1t5 = (-5.3,1.5,0.0); +ki2t5 = (-2.3,1.0,-0.4); +ki3t5 = (-0.5,0.6,0.8); +ki4t5 = (0.3,-0.2,-0.4); +ki5t5 = (0.9,-0.2,-1.1); +ki6t5 = (0.9,1.8,-0.6); +ki7t5 = (-0.4,1.8,0.4); +ki8t5 = (-0.4,0.3,-0.2); +ki9t5 = (0.3,-6.0,0.1); +ki10t5 = (5.7,-5.5,0.6); +ki11t5 = (5.8,0.9,0.6); +ki12t5 = (1.6,1.2,0.4); +ki13t5 = (0.1,1.1,-0.6); +ki14t5 = (-2.4,1.3,0.3); +ki15t5 = (-2.4,0.8,0.3); +ki16t5 = (0.1,0.8,-0.6); +ki17t5 = (1.6,0.8,0.4); +ki18t5 = (5.0,0.8,0.4); + + +% Hermite polynomials + +vardef Pne( expr pr ) = ( (2*pr-3)*(pr**2)+1 ) enddef; +vardef Pwo( expr pr ) = ( (3-2*pr)*(pr**2) ) enddef; +vardef Tne( expr pr ) = ( pr*(pr*(pr-2)+1) ) enddef; +vardef Two( expr pr ) = ( (pr-1)*(pr**2) ) enddef; + +% Derivatives + +vardef Pone( expr pr ) = ( 6*pr*(pr-1) ) enddef; +vardef Ptwo( expr pr ) = ( 6*pr*(1-pr) ) enddef; +vardef Tone( expr pr ) = ( pr*(3*pr-4)+1 ) enddef; +vardef Ttwo( expr pr ) = ( pr*(3*pr-2) ) enddef; + +vardef Wei( expr pre, nex ) = + ( 0.5*( nex - pre ) ) +enddef; + +vardef Hermite( expr pr, zer, one, two, thr ) = + ( Pne(pr)*one+Pwo(pr)*two+Tne(pr)*Wei(zer,two)+Two(pr)*Wei(one,thr) ) +enddef; + +vardef HermiteRate( expr pr, zer, one, two, thr ) = + ( Pone(pr)*one+Ptwo(pr)*two+Tone(pr)*Wei(zer,two)+Ttwo(pr)*Wei(one,thr) ) +enddef; + +vardef RopeThisWay( expr Sens, Istart, Bnum )( text KP ) = + numeric pstep, p, ap, bray; + numeric istart, ifinis, thfac, vhfac, sf; + color actp, newpoi; + pstep = 0.002; + bray = 0.12; + thfac = 15.5; + vhfac = 0.8; + if Sens: sf = 1; else: sf = -1; fi; + istart = Istart; + ifinis = Istart+sf; + ap := 0; + forever: + ap := ap+pstep; + actp := Hermite(ap,KP[istart-sf],KP[istart],KP[ifinis],KP[ifinis+sf]); + exitif conorm(actp-KP[istart])>bray; + endfor; + getready("signalvertex(" + & cstr(actp) + & "," & decimal(thfac) + & ",(0,0,0));signalvertex(" + & cstr(actp) + & "," & decimal(thfac*vhfac) + & ",(1,1,1));", actp); + p = 1; + forever: + ap := ap+pstep; + if ap>1: + ap := ap-1; + istart := ifinis; + ifinis := istart+sf; + fi; + exitif (ifinis>inum-1) or (p>Bnum) or (ifinis<1); + newpoi := Hermite(ap,KP[istart-sf],KP[istart],KP[ifinis],KP[ifinis+sf]); + if conorm(newpoi-actp)>2*bray: + actp := newpoi; + getready("signalvertex(" + & cstr(actp) + & "," & decimal(thfac) + & ",(0,0,0));signalvertex(" + & cstr(actp) + & "," & decimal(thfac*vhfac) + & ",(1,1,1));", actp); + p := incr( p ); + fi; + endfor; +enddef; + +def RopeBothWays( expr Icen, Tnum )( text VKP ) = + begingroup + save bnumpos, bnumneg; + numeric bnumpos, bnumneg; + bnumpos = floor(Tnum*(inum-Icen)/inum); + bnumneg = Tnum-bnumpos; + RopeThisWay( true, Icen, bnumpos, VKP ); + RopeThisWay( false, Icen, bnumneg, VKP ) + endgroup +enddef; + +beginfig(1); + MalcomX := false; + numeric i, a, b, c, d, rate, ratenorm, counter; + cmykcolor ca, cb, cc, cd, aux; + color kp[]; + frame = 0; + keytime = 0; + counter = 0; + forever: + a := keytime-1; + if a<0: a := 0; fi; + b := keytime; + c := keytime+1; + d := keytime+2; + if d>knum: d := knum; fi; + ratenorm := 0; + for i=0 upto inum: + ca := makecmyk( ki[i]t[a], a ); + cb := makecmyk( ki[i]t[b], b ); + cc := makecmyk( ki[i]t[c], c ); + cd := makecmyk( ki[i]t[d], d ); + aux := HermiteRate( frame, ca, cb, cc, cd ); + rate := cmyknorm( aux ); + if rate>ratenorm: ratenorm := rate; fi; + endfor; + frame := frame + W( aux )*maxtetradimstep/ratenorm; + if frame>1: + frame := frame-1; + keytime := keytime+1; + fi; + exitif (keytime>knum-1) or (keytime+frame>atime); + endfor; + a := keytime-1; + if a<0: a := 0; fi; + b := keytime; + c := keytime+1; + d := keytime+2; + if d>knum: d := knum; fi; + for i=0 upto inum: + kp[i] := Hermite( frame, ki[i]t[a], ki[i]t[b], ki[i]t[c], ki[i]t[d] ); + endfor; +% counter := incr( counter ); +% beginfig(counter); + setthearena( 15, 14 ); + RopeBothWays( icen, bnum, kp ); + doitnow; +% endfig; + endfig; + +verbatimtex +\end{document} +etex + +end; |