summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/generic/pst-magneticfield
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2010-06-12 00:12:11 +0000
committerKarl Berry <karl@freefriends.org>2010-06-12 00:12:11 +0000
commit452c9d0af12acb085390fe26cc37a9e93d689d5a (patch)
tree2a28496b755aa54c3ca3a7c8de80510899f14dbb /Master/texmf-dist/tex/generic/pst-magneticfield
parent3ca859b7c25a23c6fa253978191197782df3d799 (diff)
pst-magneticfield 1.12 (11jun10)
git-svn-id: svn://tug.org/texlive/trunk@18901 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/generic/pst-magneticfield')
-rw-r--r--Master/texmf-dist/tex/generic/pst-magneticfield/pst-magneticfield.tex325
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