diff options
Diffstat (limited to 'Master/texmf-dist/tex/generic/pst-magneticfield/pst-magneticfield.tex')
-rw-r--r-- | Master/texmf-dist/tex/generic/pst-magneticfield/pst-magneticfield.tex | 325 |
1 files changed, 60 insertions, 265 deletions
diff --git a/Master/texmf-dist/tex/generic/pst-magneticfield/pst-magneticfield.tex b/Master/texmf-dist/tex/generic/pst-magneticfield/pst-magneticfield.tex index 5e18949bd2f..417a78dade5 100644 --- a/Master/texmf-dist/tex/generic/pst-magneticfield/pst-magneticfield.tex +++ b/Master/texmf-dist/tex/generic/pst-magneticfield/pst-magneticfield.tex @@ -1,6 +1,6 @@ %% Package `pst-magneticfield.tex' %% -%% Manuel Luque +%% Manuel Luque %% Jürgen Gilg %% Herbert Voß %% @@ -20,14 +20,18 @@ \ifx\MultidoLoaded\endinput\else \input multido.tex\fi \ifx\PSTXKeyLoaded\endinput\else \input pst-xkey \fi % -\def\fileversion{1.11} -\def\filedate{2010/05/16} +\def\fileversion{1.12} +\def\filedate{2010/06/07} \message{`pst-magneticfield' v\fileversion, \filedate\space (ml,jg,hv)} % \edef\PstAtCode{\the\catcode`\@} \catcode`\@=11\relax % \SpecialCoor \pst@addfams{pst-magneticfield} + +%% prologue for postcript +\pstheader{pst-magneticfield.pro}% + % the first three parameter cannot be read with \pst@getint, because \pstFP.. do not like % the values ... used in \psmagenticfieldThreeD \define@key[psset]{pst-magneticfield}{R}[1]{\def\psk@magneticfieldR{#1}}% rayon d'une spire @@ -46,272 +50,73 @@ % \newpsstyle{styleSpire}{linecap=1,linecolor=red,linewidth=2\pslinewidth} \newpsstyle{sensCourant}{linecolor=red,linewidth=2\pslinewidth,arrowinset=0.1} -\newpsstyle{grille}{subgriddiv=0,gridcolor=lightgray,griddots=10} -\newpsstyle{cadre}{linecolor=green!20} % \define@boolkey[psset]{pst-magneticfield}[Pst@]{drawSelf}[true]{} \define@boolkey[psset]{pst-magneticfield}[Pst@]{AntiHelmholtz}[true]{} +\define@boolkey[psset]{pst-magneticfield}[Pst@]{StreamDensityPlot}[true]{} +\define@boolkey[psset]{pst-magneticfield}[Pst@]{setgray}[true]{} % \psset[pst-magneticfield]{R=1,L=4,N=6,pointsB=500,pointsS=1000, PasB=0.02,PasS=0.00275,nS=1,nL=8,drawSelf,styleSpire=styleSpire, - styleCourant=sensCourant,AntiHelmholtz=false} + styleCourant=sensCourant,AntiHelmholtz=false,StreamDensityPlot=false,setgray=false} +% +\def\tx@MFieldDict{ tx@MFieldDict begin } % \def\psmagneticfield{\pst@object{psmagneticfield}} -\def\psmagneticfield@i{% +\def\psmagneticfield@i{\@ifnextchar({\psmagneticfield@ii}{\psmagneticfield@iii(-6,-5)(6,5)}} +\def\psmagneticfield@ii(#1,#2){\@ifnextchar({\psmagneticfield@iii(#1,#2)}{\psmagneticfield@iii(#1,#2)(6,5)}} +\def\psmagneticfield@iii(#1,#2)(#3,#4){% \pst@killglue% - \ifPst@AntiHelmholtz\addbefore@par{N=2}\fi + \ifPst@AntiHelmholtz\addto@par{N=2}\fi \begin@SpecialObj% \pst@Verb{% make it global /NombreSpires \psk@magneticfieldN\space def /Radius \psk@magneticfieldR\space def /nombreLignes \psk@magneticfieldNL\space def /TableauSpires [\psk@magneticfieldChoixSpires] def + /StepLines Radius nombreLignes 1 add div def + NombreSpires 1 eq + { /Longueur 0 def + /inter 0 def } + { /Longueur \psk@magneticfieldL\space def + /inter Longueur NombreSpires 1 sub div def } ifelse % intervalle entre 2 spires \ifPst@AntiHelmholtz + /AntiHelmholtz true def TableauSpires length 0 eq {/TS [1 2] def} {/TS TableauSpires def } ifelse + /inter Radius def + /yA Radius 2 div def \else + /AntiHelmholtz false def TableauSpires length 0 eq {/TS [1 1 NombreSpires {} for] def} {/TS TableauSpires def } ifelse + /yA Longueur 2 div def \fi - /StepLines Radius nombreLignes 1 add div def - NombreSpires 1 eq - { /Longueur 0 def - /inter 0 def } - { /Longueur \psk@magneticfieldL\space def - /inter Longueur NombreSpires 1 sub div def } ifelse % intervalle entre 2 spires /NbrePointsB \psk@magneticfieldB\space def /NbrePointsS \psk@magneticfieldS\space def - \ifPst@AntiHelmholtz - /inter Radius def - /yA Radius 2 div def - \else - /yA Longueur 2 div def - \fi /PasB \psk@magneticfieldPasB\space def /PasS \psk@magneticfieldPasS\space def - /nS \psk@magneticfieldNS\space def - }% - \addto@pscode{ - /fleche { - gsave - x2 y2 moveto - y2 y1 sub x2 x1 sub atan rotate % 1 1 scale - -1 CLW mul 2 CLW mul rlineto - 7 CLW mul -2 CLW mul rlineto - -7 CLW mul -2 CLW mul rlineto - closepath - fill - grestore - } def - /Calcul_B_Spires { - /Bx 0 def - /By 0 def - 1 1 NombreSpires { % on calcule le champ resultant de toutes les spires - /iS ED % numero de la spire - /yi yA iS 1 sub inter mul sub def % position de la spire - /Bx0 { - /arz {1 Radius xP add dup mul yP yi add dup mul add sqrt div} def - yP yi add xP div arz mul - EllipticK neg - Radius dup mul xP dup mul add yP yi add dup mul add - Radius xP sub dup mul yP yi add dup mul add div - EllipticE mul - add - mul - } def - /By0 { - /arz {1 Radius xP add dup mul yP yi add dup mul add sqrt div} def - arz - EllipticK - Radius dup mul xP dup mul sub yP yi add dup mul sub - Radius xP sub dup mul yP yi add dup mul add div - EllipticE mul - add - mul - } def - \ifPst@AntiHelmholtz - iS 2 eq {/Bx0 Bx0 neg def /By0 By0 neg def} if - \fi - /Bx Bx Bx0 add def - /By By By0 add def - } for - } def - /EllipticKE{ - /K {2 Radius xP mul sqrt mul arz mul} def - /m1 {1 K dup mul sub} def - /m2 {m1 dup mul} def - /m3 {m2 m1 mul} def - /m4 {m2 dup mul} def - /m_1 {1 m1 div} def - /EllipticK { - 0.5 - 0.12498593597 m1 mul add - 0.06880248576 m2 mul add - 0.03328355376 m3 mul add - 0.00441787012 m4 mul add - m_1 ln mul - 1.38629436112 add - 0.09666344259 m1 mul add - 0.03590092383 m2 mul add - 0.03742563713 m3 mul add - 0.01451196212 m4 mul add - } def - /EllipticE { - 0.24998368310 m1 mul - 0.09200180037 m2 mul add - 0.04069697526 m3 mul add - 0.00526449639 m4 mul add - m_1 ln mul - 1 add - 0.44325141463 m1 mul add - 0.062606012206 m2 mul add - 0.04757383546 m3 mul add - 0.01736506451 m4 mul add - } def - Calcul_B_Spires -% au point Pi - /xPi xP def - /yPi yP def - /NormeB Bx dup mul By dup mul add sqrt def - /dX Bx NormeB div Pas mul def - /dXi dX def - /dY By NormeB div Pas mul def - /dYi dY def - /xCi xPi dX add def - /yCi yPi dY add def - /xP xCi def - /yP yCi def - Calcul_B_Spires -% au point C - /NormeB Bx dup mul By dup mul add sqrt def - /dX Bx NormeB div Pas mul def - /dY By NormeB div Pas mul def - /yP yPi dY dYi add 2 div add def - } def -% - 0 0 translate - /Lignes_Champ { - /Ligne_Champ [ - NbrePoints {% - EllipticKE - [ xP yP \tx@ScreenCoor ] - trace 1 eq {By 0 lt Bx 0 lt and {exit} if} if - } repeat - ] def -% - Ligne_Champ 0 get aload pop moveto % xP yP - 1 1 Ligne_Champ length 1 sub { - /iCompteur exch def - Ligne_Champ iCompteur get aload pop lineto - } for - stroke -% les flèches (xP,yP) - Ligne_Champ dup length 1 sub 3 div cvi get aload pop /y1 exch def /x1 exch def - Ligne_Champ dup length 1 sub 3 div cvi 1 add get aload pop /y2 exch def /x2 exch def - nCount 0 eq {/yAxe1 y1 def /yAxe2 y2 def} if - fleche -% - Ligne_Champ 0 get aload pop neg moveto % xP -yP - 1 1 Ligne_Champ length 1 sub { - /iCompteur ED - Ligne_Champ iCompteur get aload pop neg lineto - } for - stroke - trace 1 eq { -% (xP,-yP) - Ligne_Champ dup length 1 sub 3 div cvi get aload pop /y2 exch neg def /x2 ED - Ligne_Champ dup length 1 sub 3 div cvi 1 add get aload pop /y1 exch neg def /x1 ED - fleche - } if - Ligne_Champ 0 get aload pop exch neg exch moveto % -xP yP - 1 1 Ligne_Champ length 1 sub { - /iCompteur ED - Ligne_Champ iCompteur get aload pop exch neg exch lineto - } for - stroke -% (-xP,yP) - Ligne_Champ dup length 1 sub 3 div cvi get aload pop /y1 exch def /x1 exch neg def - Ligne_Champ dup length 1 sub 3 div cvi 1 add get aload pop /y2 exch def /x2 exch neg def - fleche - Ligne_Champ 0 get aload pop exch neg exch neg moveto % -xP -yP - 1 1 Ligne_Champ length 1 sub { - /iCompteur ED - Ligne_Champ iCompteur get aload pop exch neg exch neg lineto - } for - stroke - trace 1 eq { -% (-xP,-yP) - Ligne_Champ dup length 1 sub 3 div cvi get aload pop /y2 exch neg def /x2 exch neg def - Ligne_Champ dup length 1 sub 3 div cvi 1 add get aload pop /y1 exch neg def /x1 exch neg def - fleche - } if - } def -% -% lignes de champ de l'ensemble de la bobine - /trace 1 def - /nCount 0 def -% 0.1 Radius mul StepLines Radius mul 0.9 Radius mul { - StepLines StepLines Radius 1.5 StepLines mul sub { - /NbrePoints NbrePointsB def - /xStart ED - /yStart 0 def - /Pas PasB def - /xP xStart def - /yP yStart Pas sub def - Lignes_Champ - /nCount nCount 1 add def - } for - \ifPst@AntiHelmholtz\else - % l'axe orienté de la bobine - 0 -10 \tx@ScreenCoor moveto - 0 10 \tx@ScreenCoor lineto - stroke - /x1 0 def - /y1 yAxe1 def - /y2 yAxe2 def - /x2 0 def - fleche - %/x1 0 def - /y1 yAxe2 neg def - /y2 yAxe1 neg def - %/x2 0 def - fleche - \fi - % quelques lignes de champ autour de chaque spire - /trace 0 def - /increment 0.25 Radius mul def - \ifPst@AntiHelmholtz - /Pas PasS def - /NbrePoints NbrePointsS def - \fi - nS { % nS lignes - 0 1 TS length 1 sub { - /nTemp ED - /iS TS nTemp get def % numero de la spire en partant du haut - iS 0 eq { /iS 1 def } if % iS ne peut pas = 0 - iS NombreSpires gt { /iS NombreSpires def } if % iS ne peut pas > nbre spires - /yi yA iS 1 sub inter mul sub def % position du centre de la spire - \ifPst@AntiHelmholtz\else - /NbrePoints NbrePointsS def - /Pas PasS def - \fi - /xStart Radius increment add def - /yStart yi def - /xP xStart def - /yP yStart Pas sub def - Lignes_Champ - } for - \ifPst@AntiHelmholtz /NbrePoints NbrePoints 750 add def \fi - /increment increment 0.2 Radius mul add def - } repeat + /nS \psk@magneticfieldNS\space def +% pour la carte de densite + /xMin #1 def + /xMax #3 def + % NombreSpires 1 eq {/yMax 2 Radius mul def}{/yMax Longueur 2 mul def} ifelse + /yMax #4 def + /yMin #2 def + /Unit \pst@number\psunit def + /xUnit \pst@number\psxunit def + /yUnit \pst@number\psyunit def + /StreamDensityPlot \ifPst@StreamDensityPlot true \else false \fi def + /Setgray \ifPst@setgray true \else false \fi def }% + \addto@pscode{ \tx@MFieldDict MagneticField end} \ifPst@drawSelf \ifPst@AntiHelmholtz \psline[style=\psk@styleSpire](!Radius neg Radius 2 div)(!Radius Radius 2 div) \psline[style=\psk@styleCourant]{<-}(!-0.2 Radius 2 div)(!0.2 Radius 2 div) \psline[style=\psk@styleSpire](!Radius neg Radius 2 div neg)(!Radius Radius 2 div neg) \psline[style=\psk@styleCourant]{->}(!-0.2 Radius 2 div neg)(!0.2 Radius 2 div neg) - \else + \else \multido{\i=1+1}{\psk@magneticfieldN}{% numero de la spire \pst@Verb{ /Yspire yA \i\space 1 sub inter mul sub def } % position de la spire \psline[style=\psk@styleSpire](! Radius neg Yspire)(! Radius Yspire) @@ -321,36 +126,32 @@ \end@SpecialObj% \ignorespaces} % -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%\psmagneticfieldThreeD%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\newpsstyle{grille}{subgriddiv=0,gridcolor=lightgray,griddots=10} +\newpsstyle{cadre}{linecolor=green!20} % \def\psmagneticfieldThreeD{\pst@object{psmagneticfieldThreeD}} \def\psmagneticfieldThreeD@i(#1,#2)(#3,#4){% - \ifPst@AntiHelmholtz\addbefore@par{N=2}\fi + \ifPst@AntiHelmholtz\addto@par{N=2}\fi \begingroup \use@par \ifPst@AntiHelmholtz - \ThreeDput{% - \psframe*[style=cadre](#1,#2)(#3,#4) - \psgrid[style=grille](#1,#2)(#3,#4)} \pstFPdiv\yA{\psk@magneticfieldR}{2} - \ThreeDput[normal=0 1 0](0,\yA,0){% - \psarc[linecolor=red,linewidth=1\pslinewidth,linestyle=dashed](0,0){\psk@magneticfieldR}{180}{360}} - \ThreeDput[normal=0 1 0](0,-\yA,0){% - \psarc[linecolor=red,linewidth=1\pslinewidth,linestyle=dashed](0,0){\psk@magneticfieldR}{180}{360}} \ThreeDput{% \begin{psclip}{\psframe(#1,#2)(#3,#4)} - \psmagneticfield[drawSelf=false]% + \psframe*[style=cadre](#1,#2)(#3,#4) + \psgrid[style=grille](#1,#2)(#3,#4) + \psmagneticfield[drawSelf=false](#1,#2)(#3,#4)% \end{psclip}} \ThreeDput[normal=0 1 0](0,\yA,0){% \psarc[linecolor=red,linewidth=3\pslinewidth](0,0){\psk@magneticfieldR}{0}{180} - \psarc[linecolor=red,linewidth=3\pslinewidth]{<-}(0,0){\psk@magneticfieldR}{80}{90}} - \ThreeDput[normal=0 1 0](0,-\yA,0){% + \psarc[linecolor=red,linewidth=3\pslinewidth]{<-}(0,0){\psk@magneticfieldR}{80}{90} + \psarc[linecolor=red,linewidth=1\pslinewidth,linestyle=dashed](0,0){\psk@magneticfieldR}{180}{360}} + \ThreeDput[normal=0 1 0](0,-\yA,0){% \psarc[linecolor=red,linewidth=3\pslinewidth](0,0){\psk@magneticfieldR}{0}{180} - \psarc[linecolor=red,linewidth=3\pslinewidth]{->}(0,0){\psk@magneticfieldR}{80}{90}} + \psarc[linecolor=red,linewidth=3\pslinewidth]{->}(0,0){\psk@magneticfieldR}{80}{90} + \psarc[linecolor=red,linewidth=1\pslinewidth,linestyle=dashed](0,0){\psk@magneticfieldR}{180}{360}} \else - \ifnum\psk@magneticfieldN=1 + \ifnum\psk@magneticfieldN=1 \def\MF@inter{0} \def\yA{0} \else @@ -359,24 +160,18 @@ \pstFPdiv\yA{\psk@magneticfieldL}{2} \fi \ThreeDput{% - \psframe*[style=cadre](#1,#2)(#3,#4) - \psgrid[style=grille](#1,#2)(#3,#4)} - \multido{\iN=1+1,\iS=0+1}{\psk@magneticfieldN}{% - \pstFPmul\MF@calcA{\iS}{\MF@inter} - \pstFPsub\posSpire{\yA}{\MF@calcA} - \ThreeDput[normal=0 1 0](0,\posSpire,0){% - \psarc[linecolor=red,linewidth=1\pslinewidth,linestyle=dashed](0,0){\psk@magneticfieldR}{180}{360}} - }% - \ThreeDput{% \begin{psclip}{\psframe(#1,#2)(#3,#4)} - \psmagneticfield[drawSelf=false]% + \psframe*[style=cadre](#1,#2)(#3,#4) + \psgrid[style=grille](#1,#2)(#3,#4) + \psmagneticfield[drawSelf=false](#1,#2)(#3,#4)% \end{psclip}} \multido{\iN=1+1,\iS=0+1}{\psk@magneticfieldN}{% \pstFPmul\MF@calcA{\iS}{\MF@inter} \pstFPsub\posSpire{\yA}{\MF@calcA} \ThreeDput[normal=0 1 0](0,\posSpire,0){% - \psarc[linecolor=red,linewidth=3\pslinewidth](0,0){\psk@magneticfieldR}{0}{180} - \psarc[linecolor=red,linewidth=3\pslinewidth]{->}(0,0){\psk@magneticfieldR}{80}{90}} + \psarc[style=\psk@styleSpire](0,0){\psk@magneticfieldR}{0}{180} + \psarc[style=\psk@styleCourant]{->}(0,0){\psk@magneticfieldR}{80}{90} + \psarc[style=\psk@styleSpire,linestyle=dashed](0,0){\psk@magneticfieldR}{180}{360}}% }% \fi \endgroup} @@ -384,5 +179,5 @@ \catcode`\@=\PstAtCode\relax % %% END -\endinput +\endinput |