summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/metapost/featpost/example/slingshot.mp
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/doc/metapost/featpost/example/slingshot.mp')
-rw-r--r--Master/texmf-dist/doc/metapost/featpost/example/slingshot.mp87
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.