diff options
Diffstat (limited to 'Master/texmf-dist/doc/metapost/featpost/example/slingshot.mp')
-rw-r--r-- | Master/texmf-dist/doc/metapost/featpost/example/slingshot.mp | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/metapost/featpost/example/slingshot.mp b/Master/texmf-dist/doc/metapost/featpost/example/slingshot.mp new file mode 100644 index 00000000000..b8c26d9af5d --- /dev/null +++ b/Master/texmf-dist/doc/metapost/featpost/example/slingshot.mp @@ -0,0 +1,87 @@ +% slingshot.mp +% L. Nobre G. +% 2008 + +input featpost3Dplus2D; + +% bash: export TEX=latex +% tcsh: setenv TEX latex + +%prologues := 0; + +% verbatimtex +% \documentclass{article} +% \usepackage{beton,concmath,ccfonts} +% \begin{document} +% etex + +f := (30,0,0); +Spread := 100; +MaxFearLimit := 50; + +numeric initdist, timestep, Gfactor, vplanet, vprobe; +numeric targetangle, cutlinangle; +inidist = 10; +timestep = 0.1; +Gfactor = 7; +vplanet = 1.3; +vprobe = 1.2; +numeric numsteps, cutlinelen, distfraction, numtries, diststep, i, ip; +numeric a, aa, ab, ac; +color inipos, inivel, dstp, iter; +path cutlinepath, traject; + +def gravitfield( expr relatposprobe ) = + ( -Gfactor*relatposprobe/((conorm( relatposprobe ))**3) ) +enddef; + +def costfu( expr actang ) = + (((cutlinangle-actang-targetangle)/targetangle)**2) +enddef; + +vardef scalarfu( expr index ) = + traject:=trajectorypath( + numsteps, + inipos+index*dstp, + inivel, + timestep)(gravitfield); + draw traject; + ip := xpart( traject intersectiontimes cutlinepath ); + a := costfu( angle(direction ip of traject) ); + ( a ) +enddef; + +beginfig(1); + targetangle = 50; + cutlinelen = 15; + distfraction = 0.74; + numtries = 36; + numsteps = 135; + diststep = distfraction*inidist/numtries; + dstp = (0,0,diststep); + inipos = (0,0,-inidist); + inivel = (0,-vplanet,vprobe); + cutlinangle = angle( (-vplanet,vprobe) ); + %cartaxes( 1, 1, 1 ); + cutlinepath = rp(black)--rp(cutlinelen*N(inivel)); + draw cutlinepath withcolor red; + drawoptions( withcolor blue ); + for i=0 upto numtries: + show (i,scalarfu( i )); + endfor; + drawoptions(); + iter = (0,0.5*numtries,numtries); + message "--------------------------------------------------------"; + forever: + iter := minimizestep( iter )( scalarfu ); + exitif (Z(iter)-X(iter)<0.5) or (Y(iter)<0.005); + endfor; + draw traject withcolor green withpen (pencircle scaled (2.5mm)) ; + produce_auto_scale; +endfig; + +% verbatimtex +% \end{document} +% etex + +end. |