diff options
author | Karl Berry <karl@freefriends.org> | 2017-06-04 23:51:16 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2017-06-04 23:51:16 +0000 |
commit | d54158fbc6232030aa9a594abefb3681bcef4dde (patch) | |
tree | 4a546381c2d238fed1c13849b08e20a70d00ef75 /Master/texmf-dist/tex/generic | |
parent | 750e0d15a865e73e76bb8f44cd4fbf4d753af28d (diff) |
pst-vehicle (1jun17)
git-svn-id: svn://tug.org/texlive/trunk@44460 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/generic')
-rw-r--r-- | Master/texmf-dist/tex/generic/pst-vehicle/pst-vehicle.tex | 221 |
1 files changed, 221 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/generic/pst-vehicle/pst-vehicle.tex b/Master/texmf-dist/tex/generic/pst-vehicle/pst-vehicle.tex new file mode 100644 index 00000000000..83d4ff901a1 --- /dev/null +++ b/Master/texmf-dist/tex/generic/pst-vehicle/pst-vehicle.tex @@ -0,0 +1,221 @@ +%% +%% This is file `pst-vehicle.tex', +%% +%% IMPORTANT NOTICE: +%% +%% Package `pst-vehicle.tex' +%% +%% Thomas S\"{o}ll +%% with the collaboration of +%% Juergen Gilg +%% Manuel Luque +%% +%% This program can redistributed and/or modified under %% +%% the terms of the LaTeX Project Public License %% +%% Distributed from CTAN archives in directory %% +%% macros/latex/base/lppl.txt; either version 1.3c of %% +%% the License, or (at your option) any later version. %% + +%% +%% DESCRIPTION: +%% `pst-vehicle' is a PSTricks package +%% +%% +\csname PSTvehicleLoaded\endcsname +\let\PSTvehicleLoaded\endinput +% Requires PSTricks, pst-xkey, pst-node packages +\ifx\PSTricksLoaded\endinput\else\input pstricks.tex\fi +\ifx\PSTXKeyLoaded\endinput\else\input pst-xkey.tex\fi +\ifx\PSTplotLoaded\endinput\else\input pst-plot.tex\fi +\ifx\PSTnodeLoaded\endinput\else\input pst-node.tex\fi +\def\fileversion{1.0} +\def\filedate{2017/05/29} +\message{`PST' v\fileversion, \filedate} + +\edef\PstAtCode{\the\catcode`\@} \catcode`\@=11\relax + +\definecolor{greenSlp}{rgb}{0,0.4,0.0} +\definecolor{redSlp}{rgb}{0.7,0.134,0.134} + +\pst@addfams{pst-vehicle} +\define@key[psset]{pst-vehicle}{backwheel}[\wheelA]{\def\pst@backwheel{#1 }} % +\define@key[psset]{pst-vehicle}{frontwheel}[\wheelA]{\def\pst@frontwheel{#1 }} % +\define@key[psset]{pst-vehicle}{ownvehicle}{\def\pst@ownvehicle{#1 }} % +\define@key[psset]{pst-vehicle}{vehicle}[\Bike]{\def\pst@vehicle{#1}} % +\define@key[psset]{pst-vehicle}{d}[5.8]{\def\pst@d{#1 }} % +\define@key[psset]{pst-vehicle}{rF}[1.6]{\def\pst@rF{#1 }} % +\define@key[psset]{pst-vehicle}{rB}[1.6]{\def\pst@rB{#1 }} % +\define@key[psset]{pst-vehicle}{gang}[1]{\def\pst@gang{#1 }} % +\define@key[psset]{pst-vehicle}{epsilon}[1e-6]{\def\pst@epsilon{#1 }} % +\define@boolkey[psset]{pst-vehicle}[Pst@]{showSlope}[true]{} % +\define@boolkey[psset]{pst-vehicle}[Pst@]{MonoAxis}[false]{} % +\input{ListVehicles.tex} +\psset[pst-vehicle]{gang=1,epsilon=1e-6,rB=1.6,rF=1.6,d=5.8,vehicle=\Bike,ownvehicle=,backwheel=\wheelA,frontwheel=\wheelA,showSlope=true,MonoAxis=false} +\psset{algebraic} +\def\psVehicle{\def\pst@par{}\pst@object{psVehicle}}% +\def\psVehicle@i#1#2#3{% +\pst@killglue% +\begingroup% +\use@par +%----------------------------------------------------------------------------------------------------- +\expandafter\ifx\pst@vehicle\HighWheeler\psset{rF=4,rB=1.13,d=5.8}\fi +\expandafter\ifx\pst@vehicle\Bike\psset{rF=1.6,rB=1.6,d=5.8}\fi +\expandafter\ifx\pst@vehicle\Truck\psset{rF=1.9,rB=1.9,d=6.28}\fi +\expandafter\ifx\pst@vehicle\Tractor\psset{rF=1,rB=1.4,d=4}\fi +\expandafter\ifx\pst@vehicle\UniCycle\psset{rB=1.6,MonoAxis=true}\fi +\expandafter\ifx\pst@vehicle\Segway\psset{MonoAxis=true}\fi +\begin@SpecialObj +\pst@Verb{% + /rpn { tx@AlgToPs begin AlgToPs end cvx } def% + /x0 #2 def % -------------- x-Wert des Punktes auf der Kurve, wo das Hinterrad die Kurve ber\"{u}hrt; von diesem Wert startet die Rechnung +%---- % Definition of the function f(x), its first derivative f'(x) and \sqrt{1+f'(x)^2} Definition de la fonction et la premiere derivee + /func (#3) rpn def + /Diff (Derive(1,#3)) rpn def + /DiffI (Derive(2,#3)) rpn def + /dAB (sqrt(1+Diff^2)) rpn def + /dABdiff (Derive(1,sqrt(1+(Derive(1,#3))^2))) rpn def + /x x0 def func /funcx0 exch def % ----- f(x0) + /x x0 def Diff /Diffx0 exch def % ----- f'(x0) + /x x0 def DiffI /DiffIx0 exch def % --- f''(x0) +% Calculating the length of the function between X1 and X2 ---- longueur de l'arc entre les points d'abscisse X1 et X2 % +/eps \pst@epsilon def +% Definition of a transmission between frontwheel and backwheel (interesting for vehicles with pedals) --- Gangschaltung +/Gang \pst@gang def +%% Definition of a scaling factor for the vehicles +#1 /skal exch def +%------------------ Radius frontwheel ----------------------------------------- +/rF \pst@rF def +/rB \pst@rB def +/dA12 \pst@d def +/rFs rF skal mul def +/rBs rB skal mul def +%--------% dA12 = Distance between the axes of the wheels ----- Achsabstand --- distance entre les axes +/dA12s dA12 skal mul def +/tA 1 1 Diffx0 dup mul add sqrt div def% +/deltax0 tA Diffx0 mul rBs mul def +/deltay0 tA rBs mul def +%--------- inferior value to search for the intersection point of the frontwheel with the curve +/Xinf x0 def % ---------------------------------- Untergrenze f\"{u}r die Schnittpunktsuche des Vorderrades mit der Kurve +% superior value to search for the intersection point of the frontwheel with the curve = x0 + distance axes + radius frontwheel + radius backwheel +/Xsup x0 dA12s add rBs rFs add add def % ---------- Obergrenze f\"{u}r die Schnittpunktsuche des Vorderrades mit der Kurve +%---% Calculating the intersection point of the frontwheel with the function------ Schnittpunktberechnung --------------------------------- +/NB 0 def %-----------------loop-variable ----- Laufvariable f\"{u}r loop +/NbreIterations 200 def % ---------- Maximum of iterations for the loop +/Function ((x-x0+rBs*Diffx0/(sqrt(1+(Diffx0)^2))-rFs*(Diff)/(sqrt(1+(Diff)^2)))^2+% + (func-funcx0+rFs/(sqrt(1+(Diff)^2))-rBs/(sqrt(1+(Diffx0)^2)))^2-dA12s^2) rpn def +{ %------------------------------------ loop begin --------------------- + /xM Xinf Xsup add 2 div def %--------- Mittelwert von xM = (Xinf + Xsup):2 + /x Xinf def + /F_1 Function def %----------------- F(Xinf) + /x xM def %------------------------- + /F_M Function def %----------------- F(xM) + F_M 0 eq {exit} if %---------------- if F(xM) = 0 --> exit + F_1 F_M mul 0 ge {/Xinf xM def} %-- F(Xinf) * F(xM) >= 0 Xinf = xM, else Xsup = xM + {/Xsup xM def} + ifelse + Xinf Xsup sub abs 1e-8 le {exit} if %- if Xinf - Xsup <= 10^-8 --> exit + /NB NB 1 add def %------------------- else loopvariable NB = NB + 1 Loopvariable um eins erh\"{o}hen + NB NbreIterations ge {exit} if %------ if number of iterations >= 200 --> exit + } loop +/FWx xM def +/FWy /x FWx def func def %----------------------- Ber\"{u}hrpunkt des Vorderrades (FWx,FWy) +/mFWy /x FWx def Diff def %----------------------- mFWy = Tangentensteigung in (FWx,FWy) +/TermFW 1 1 mFWy dup mul add sqrt div def % 1/sqrt(1+f'(x_Q)^2) +/deltaxFW TermFW mFWy mul rFs mul def % skal*rF*f'(x_Q)*1/sqrt(1+f'(x_Q)^2) +/deltayFW TermFW rFs mul def % skal*rF*1/sqrt(1+f'(x_Q)^2) +%------------------------------------------------------------------------------------ +/KWRho {DiffI 1 Diff dup mul add 3 exp sqrt div} def +/dPhiB {1 rBs div KWRho sub dAB mul abs} def +/AngleCumB { % + X1 X2 /x {dPhiB} eps SIMPSON + } def + /dPhiF {1 rFs div KWRho sub dAB mul abs} def +/AngleCumF { % + X1 X2 /x {dPhiF} eps SIMPSON + } def +% % length of the curve for the wheels -- La longueur de la courbe pour la roue avant --- Kurvenl\"{a}nge +/X1 0 def /X2 x0 def % Integral_{0}^{x0} +/sB AngleCumB def % ---backwheel - length from 0 to x0 ---- roue arri\`{e}re ---- Kurvenl\"{a}nge von 0 bis x0 (Hinterrad) +/X2 FWx def +/sF AngleCumF def % --frontwheel - length from 0 to the abscissa of the intersection frontwheel with curve - roue avant -- Kurvenl\"{a}nge von 0 bis zum SP Vorderrad - Kurve +%-------------------------------------------------------------------------------------------------------------------- +%---% Definition angle of rotation for the backwheel --- Definition de l'angle de roue arriere ---- Rotationswinkel des Hinterrades +/phiB sB RadToDeg neg def +%---% Definition angle of rotation for the frontwheel --- Definition de l'angle de roue avant ---- Rotationswinkel des Vorderrades +/phiF sF RadToDeg neg def +%--------------------------------------------------------------------------------------------------------------------- +%--% coordinates for the axes of the wheels within the non-scaled system -- Koordinaten der Vorderradachse im nicht skalierten System ( au{\ss}erhalb der \psscalebox ) +%---------------------------------------------------------------------------------------------------------------------- +/AFx FWx deltaxFW sub def % % x-coordinate front axis x-Koordinate der Vorderradachse +/AFy FWy deltayFW add def % % y-coordinate front axis y-Koordinate der Vorderradachse +/ABx x0 deltax0 sub def % % x-coordinate back axis x-Koordinate der Hinterradachse +/ABy funcx0 deltay0 add def % % y-coordinate back axis y-Koordinate der Hinterradachse +%--------------- Koordinaten der Vorderradachse im System des Fahrzeugs, also unskalierte Gr\"{o}{\ss}en verwenden --( innerhalb der \psscalebox ) +%--coordinates for the front axis of the wheels within \psscalebox -- Die Koordinaten der Hinterradachse sind im System des Fahrzeugs (0,0) +/AF1x dA12 dup mul rF rB sub dup mul sub sqrt def +/AF1y rF rB sub def +%------% slope and angle of the vehicle----------------------------------------------------------------------------- +/m-vehicle AFy ABy sub AFx ABx sub div def +/beta m-vehicle 1 atan def % % angle for both radii of front- and backwheel are equal -- Neigungswinkel des Fahrzeugs bei gleich gro{\ss}en R\"{a}dern +/alpha AF1y neg AF1x atan def % % additional angle if radii of front- and backwheel are not equal -- zus\"{a}tzlicher Winkel bei unterschiedlich gro{\ss}en R\"{a}dern +% whole angle (correction with +180 in case the whole angle gets 90 degrees which can be possible with not equal radii) +/gamma beta alpha add AFx ABx lt { 180 add } if def % gesamter Neigungswinkel des Fahrzeugs +%--------% Special case (mono-axis vehicle) Nr 4 --> segway --------------------------------------------------------------------------- +\ifPst@MonoAxis Diffx0 1 atan /omega exch def Diffx0 /mVehicle exch def \else FWy funcx0 sub FWx x0 sub div /mVehicle exch def mVehicle 1 atan /omega exch def \fi +/normNorm x0 FWx sub FWy funcx0 sub div dup mul 1 add sqrt def +/mTgy FWy funcx0 sub 0 eq { 1 } { x0 FWx sub FWy funcx0 sub div normNorm div } ifelse def +/mTgx FWy funcx0 sub 0 eq { 0 } { 1 normNorm div } ifelse def +/xMTg x0 FWx add 2 div def +/yMTg funcx0 FWy add 2 div def +}% +%------------------------%%%% END OF PS-CODE %%%%%-------------------------------------------------------- +\pnode(!FWx FWy){FW}% +% % angle between the axes angle de droite entre les axes +\rput{!gamma}(!ABx ABy){% Das Fahrzeug wird mit Hilfe der Hinterradachse (ABx,ABy) und Gesamtdrehwinkel gamma gesetzt +%------------------------- % SETTING SOME VEHICLES ------------------------------------------------------- +\psscalebox{#1}{%---------------Das Fahrzeug kann skaliert werden ----------------------------------------- +%\psset{linecolor=#2}% +\pst@vehicle}}% +\ifPst@showSlope +\rput{!omega}(!x0 mVehicle 0 ge { 0 add } { 100 add } ifelse funcx0 0.75 sub){% +\psframebox[fillstyle=solid,fillcolor=greenSlp,linestyle=none]{\footnotesize\color{white}$m\geq 0$}} +\rput{!omega}(!x0 mVehicle 0 lt { 0 add } { 100 add } ifelse funcx0 0.75 sub){% +\psframebox[fillstyle=solid,fillcolor=redSlp,linestyle=none]{\footnotesize\color{white}$m < 0$}} +\ifPst@MonoAxis +\psplotTangent[linewidth=0.75\pslinewidth,linecolor=orange,nodesep=-2]{x0}{1}{#3} +\psplotTangent[linewidth=0.75\pslinewidth,linecolor=greenSlp,Tnormal,nodesep=-2]{x0}{1}{#3} +\psdot[linecolor=red](!x0 funcx0) +\else +\pcline[linecolor=greenSlp,nodesepA=-1,nodesepB=-3](!xMTg yMTg)(!xMTg mTgy 0 ge { mTgx } { mTgx neg } ifelse add yMTg mTgy abs add) +\pcline[linecolor=magenta,nodesep=-2](FW)(!x0 funcx0) +\psdot[linecolor=red](FW) +\psdot[linecolor=red](!x0 funcx0) +\fi% +\fi% +\showpointsfalse +\end@SpecialObj +\endgroup\ignorespaces}% +% +\def\SlopeoMeter#1#2{% +\colorlet{slpmColor}{#1} +\rput{0}(0,0){% +\pscircle[fillstyle=solid,fillcolor=black!90,linewidth=0.5pt,linestyle=solid](0,0){2.2} +\rput{!#2}(0,0){% +\multido{\r=.500+-.008,\rC=0+0.02}{25}{% +\pscircle[linewidth=0.008,linecolor=slpmColor,strokeopacity=\rC](0,0){!\r} +} +\multido{\i=0+2,\r=.400+-.008,\rC=0+0.02}{50}{% +\pswedge[linestyle=none,linewidth=0,fillstyle=solid,fillcolor=slpmColor,opacity=\r](0,0){2}{\i}{!\i\space 2 add} +}} +\multido{\nA=-90+10}{19}{% +\psline[linecolor=slpmColor](1.8;\nA)(1.95;\nA) +\rput(1.65;\nA){\psscalebox{0.4}{\color{slpmColor!10}\nA}} +} +\rput(-0.95,0.85){\psscalebox{0.6}{\color{slpmColor!20}\texttt{Steigungswinkel}}} +\rput(-0.95,0.5){\psscalebox{0.75}{\color{slpmColor!40}\texttt{Slope-o-Meter}}} +\rput{!#2}(0,0){% +\pspolygon[fillstyle=solid,fillcolor=slpmColor!50,linecolor=slpmColor,linejoin=2,linewidth=0.1pt](0.1;15)(0.1;-15)(1.75;0) +\pscircle[fillstyle=solid,fillcolor=black,linestyle=none,linewidth=0pt](0,0){0.3} +}}} +\catcode`\@=\PstAtCode\relax +\endinput |