diff options
Diffstat (limited to 'Master/texmf-dist/doc/latex/pas-cours/macro-solides.tex')
-rw-r--r-- | Master/texmf-dist/doc/latex/pas-cours/macro-solides.tex | 717 |
1 files changed, 717 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/latex/pas-cours/macro-solides.tex b/Master/texmf-dist/doc/latex/pas-cours/macro-solides.tex new file mode 100644 index 00000000000..7a33a05a89d --- /dev/null +++ b/Master/texmf-dist/doc/latex/pas-cours/macro-solides.tex @@ -0,0 +1,717 @@ +% Fichier comprenant les macros construisant les solides + +% \prismereg : dessine un prisme à base régulière +% Synthaxe : \prismreg[ n = nombre de côtés de la base (>2) - par défaut : 3, +% bordercolor = ... (par défaut : noir), +% incolor = ... (par défaut : blanc), +% coefopaq = ... (par défaut : 0.5), +% axe (booléen : si oui, axe tracé), +% axecolor = couleur de l'axe (par défaut : rouge), +% name (booléen : si oui, nom du sommet et du centre de la base mentionnés), +% sommet = nom du sommet (par défaut : S), +% posommet = ..., +% centre = nom du centre de la base (par défaut : O), +% scalecentre = coef. d'agrandissement du point du centre de la base, +% poscentre = position du nom du centre de la base (par défaut : below), +% hauteur = ... (par défaut, 5 cm), +% rayon = ... (par défaut, 2 cm), +% legende : booléen, +% incl = coefficient d'inclinaison de la base (par défaut : 1), +% rotat = angle de rotation (par défaut : 0°)] + +\define@cmdkey [PAS] {prismereg} {n}{} +\define@cmdkey [PAS] {prismereg} {bordercolor}{} +\define@cmdkey [PAS] {prismereg} {incolor}{} +\define@cmdkey [PAS] {prismereg} {coefopaq}{} +\define@boolkey[PAS] {prismereg} {axe}[true]{} +\define@cmdkey [PAS] {prismereg} {axecolor}{} +\define@boolkey[PAS] {prismereg} {name}[true]{} +\define@boolkey[PAS] {prismereg} {legende}[true]{} +\define@cmdkey [PAS] {prismereg} {hauteur}{} +\define@cmdkey [PAS] {prismereg} {rayon}{} +\define@cmdkey [PAS] {prismereg} {incl}{} +\define@cmdkey [PAS] {prismereg} {rotat}{} + +\presetkeys [PAS] {prismereg} { + n = 3, + bordercolor = black, + incolor = white, + coefopaq = 0.5, + axe = false, + axecolor = red, + legende = false, + name = false, + hauteur = 5, + rayon = 2, + rotat = 0.1, + incl = 1}{} + +\newcommand*{\prismereg}[1][]{\pasPrismereg[#1]} + +\def\pasPrismereg[#1]{ + \setkeys[PAS]{prismereg}{#1} + \pgfmathparse{\cmdPAS@prismereg@n==3} + \IfStrEq{\pgfmathresult}{1.0}{\def\rotat{10}}{\def\rotat{\cmdPAS@prismereg@rotat}} + \def\cotes{\cmdPAS@prismereg@n} + \pgfmathparse{\cotes-1}\let\cote\pgfmathresult + \ifPAS@prismereg@name + \foreach \i in {1,2,...,\cotes} + { + \pgfmathparse{(360/\cotes)*(\i-1)+\cmdPAS@prismereg@rotat}\let\angle\pgfmathresult + \pgfmathparse{\cmdPAS@prismereg@rayon*cos(\angle)}\let\Mx\pgfmathresult + \pgfmathparse{\cmdPAS@prismereg@incl*sin(\angle)}\let\My\pgfmathresult + \IfStrEq{\angle}{0.1} + { + \def\posname{right} + } + { + \IfStrEq{\angle}{180.0} + { + \def\posname{left} + } + { + \IfStrEq{\angle}{90.0} + { + \def\posname{above} + } + { + \IfStrEq{\angle}{270.0} + { + \def\posname{below} + } + { + \pgfmathparse{\angle<180} + \IfStrEq{\pgfmathresult}{1.0} + { + \pgfmathparse{\angle<90} + \IfStrEq{\pgfmathresult}{1.0} + { + \def\posname{above right} + } + { + \def\posname{above left} + } + } + { + \pgfmathparse{\angle<270} + \IfStrEq{\pgfmathresult}{1.0} + { + \def\posname{below left} + } + { + \def\posname{below right} + } + } + } + } + } + } + \node[\posname,\cmdPAS@prismereg@bordercolor] at (\Mx,\My) {$A_{\i}$}; + } + \fi + \pgfmathparse{\cmdPAS@prismereg@rayon*cos((360/\cotes)*\cote+\rotat)}\let\Mx\pgfmathresult + \pgfmathparse{\cmdPAS@prismereg@incl*sin((360/\cotes)*\cote+\rotat)}\let\My\pgfmathresult + \pgfmathparse{\cmdPAS@prismereg@rayon*cos(\rotat)}\let\Nx\pgfmathresult + \pgfmathparse{\cmdPAS@prismereg@incl*sin(\rotat)}\let\Ny\pgfmathresult + \pgfmathparse{\cmdPAS@prismereg@rayon*cos((360/\cotes)+\rotat)}\let\Px\pgfmathresult + \pgfmathparse{\cmdPAS@prismereg@incl*sin((360/\cotes)+\rotat)}\let\Py\pgfmathresult + \shade[draw=\cmdPAS@prismereg@bordercolor,shading=ball, ball color=\cmdPAS@prismereg@incolor,opacity=\cmdPAS@prismereg@coefopaq] (\Nx,\Ny) -- (\Px,\Py) -- (\Px,\Py+\cmdPAS@prismereg@hauteur) -- (\Nx,\Ny+\cmdPAS@prismereg@hauteur) -- cycle; + \draw[\cmdPAS@prismereg@bordercolor] (\Mx,\My) -- (\Nx,\Ny) -- (\Nx,\Ny+\cmdPAS@prismereg@hauteur); + \foreach \i in {1,...,\cote} + { + \pgfmathparse{\cmdPAS@prismereg@rayon*cos((360/\cotes)*\i+\rotat)}\let\Mx\pgfmathresult + \pgfmathparse{\cmdPAS@prismereg@incl*sin((360/\cotes)*\i+\rotat)}\let\My\pgfmathresult + \pgfmathparse{\cmdPAS@prismereg@hauteur+\cmdPAS@prismereg@incl*sin((360/\cotes)*\i+\rotat)}\let\MMy\pgfmathresult + \path[coordinate] (\Mx,\MMy) coordinate (T\i); + \IfStrEq{\i}{1}{\global\def\xi{\Mx}\global\def\yi{\My}}{} + \pgfmathparse{\cmdPAS@prismereg@rayon*cos((360/\cotes)*(\i-1)+\rotat)}\let\Nx\pgfmathresult + \pgfmathparse{\cmdPAS@prismereg@incl*sin((360/\cotes)*(\i-1)+\rotat)}\let\Ny\pgfmathresult + \pgfmathparse{\cmdPAS@prismereg@rayon*cos((360/\cotes)*(\i+1)+\rotat)}\let\Px\pgfmathresult + \pgfmathparse{\cmdPAS@prismereg@incl*sin((360/\cotes)*(\i+1)+\rotat)}\let\Py\pgfmathresult + \IfStrEq{\cotes}{3}{\def\ang{120}}{\def\ang{140}} + \pgfmathparse{(360/\cotes)*\i<181} + \IfStrEq{\pgfmathresult}{1.0} + { + \draw[dotted,\cmdPAS@prismereg@bordercolor] (\Nx,\Ny) -- (\Mx,\My); + } + { + \draw[\cmdPAS@prismereg@bordercolor] (\Nx,\Ny) -- (\Mx,\My); + } + \pgfmathparse{(360/\cotes)*\i<\ang} + \IfStrEq{\pgfmathresult}{1.0} + { + \shade[shading=ball, ball color=\cmdPAS@prismereg@incolor,opacity=\cmdPAS@prismereg@coefopaq] (\Mx,\My+\cmdPAS@prismereg@hauteur) -- (\Mx,\My) -- (\Px,\Py) -- (\Px,\Py+\cmdPAS@prismereg@hauteur) -- cycle; + \draw[dotted,\cmdPAS@prismereg@bordercolor] (\Mx,\My) -- (\Mx,\My+\cmdPAS@prismereg@hauteur); + } + { + \shade[shading=ball, ball color=\cmdPAS@prismereg@incolor,opacity=\cmdPAS@prismereg@coefopaq] (\Mx,\My+\cmdPAS@prismereg@hauteur) -- (\Mx,\My) -- (\Px,\Py) -- (\Px,\Py+\cmdPAS@prismereg@hauteur) -- cycle; + \draw[\cmdPAS@prismereg@bordercolor] (\Mx,\My+\cmdPAS@prismereg@hauteur) -- (\Mx,\My) -- (\Px,\Py) -- (\Px,\Py+\cmdPAS@prismereg@hauteur); + } + } + \pgfmathparse{\cmdPAS@prismereg@rayon*cos(\rotat)}\let\Mx\pgfmathresult + \pgfmathparse{\cmdPAS@prismereg@hauteur+\cmdPAS@prismereg@incl*sin(\rotat)}\let\MMy\pgfmathresult + \path[coordinate] (\Mx,\MMy) coordinate (T\cotes); + \shade[shading=ball, ball color=\cmdPAS@prismereg@incolor,opacity=\cmdPAS@prismereg@coefopaq] (T1) + \foreach \i in {2,...,\cotes}{--(T\i)}--cycle; + \draw[\cmdPAS@prismereg@bordercolor] (T1) + \foreach \i in {2,...,\cotes}{--(T\i)}--cycle; + \ifPAS@prismereg@legende + \IfStrEq{\cmdPAS@prismereg@incolor}{white}{\def\couleur{black}}{\def\couleur{\cmdPAS@prismereg@incolor}} + % Bases + \pgfmathparse{\cmdPAS@prismereg@rayon*cos(-85)+.5}\let\x\pgfmathresult + \pgfmathparse{\cmdPAS@prismereg@incl*sin(-85)-1}\let\y\pgfmathresult + \draw[<-,>=stealth,dotted,\couleur] (.5,-.5) to [bend right=30] (\x,\y) node[right,\couleur] {\texttt{base (polygonale)}}; + \draw[<-,>=stealth,dotted,\couleur] (.5,.5+\cmdPAS@prismereg@hauteur) to [bend left=30] (\x,\y+\cmdPAS@prismereg@hauteur+4) node[right,\couleur] {\texttt{base (polygonale)}}; + % Faces latérales + \pgfmathparse{\cmdPAS@prismereg@rayon*cos(\rotat)}\let\Mx\pgfmathresult + \pgfmathparse{\cmdPAS@prismereg@incl*sin(\rotat)}\let\My\pgfmathresult + \pgfmathparse{\cmdPAS@prismereg@rayon*cos(\rotat-360/\cotes)}\let\Nx\pgfmathresult + \pgfmathparse{\cmdPAS@prismereg@incl*sin(\rotat-360/\cotes)}\let\Ny\pgfmathresult + \coordinate (M) at (\Mx,\My); + \coordinate (N) at (\Nx,\Ny); + \coordinate (T) at (\Nx,\Ny+\cmdPAS@prismereg@hauteur); + \coordinate (G) at (barycentric cs:M=1,N=1,T=1,T\cotes=1); + \draw[<-,>=stealth,\couleur] (G) to [bend left=30] ($(G)+(1.5,.5)$) node[right,\couleur] {\begin{minipage}{3cm}\texttt{face lat\'erale (rectangulaire)}\end{minipage}}; + % Hauteur + \draw[\cmdPAS@prismereg@axecolor,dotted] (T\cotes) -- ($(T\cotes)+(5,0)$); + \draw[\cmdPAS@prismereg@axecolor,dotted] (M) -- ($(M)+(5,0)$); + \draw[<->,\cmdPAS@prismereg@axecolor,>=stealth'] ($(T\cotes)+(5,0)$) -- ($(M)+(5,0)$) node[midway,right,\cmdPAS@prismereg@axecolor] {\texttt{hauteur}}; + \fi + \ifPAS@prismereg@axe + \draw[dotted,\cmdPAS@prismereg@axecolor] (0,\cmdPAS@prismereg@hauteur) -- (0,-\cmdPAS@prismereg@incl); + \draw[\cmdPAS@prismereg@axecolor] (0,\cmdPAS@prismereg@hauteur) -- (0,\cmdPAS@prismereg@hauteur+1); + \draw[\cmdPAS@prismereg@axecolor] (0,-\cmdPAS@prismereg@incl) -- (0,-\cmdPAS@prismereg@incl-1); + \ifPAS@prismereg@legende + \draw[<-,>=stealth',\cmdPAS@prismereg@axecolor] (0,\cmdPAS@prismereg@hauteur+.5) to [bend right=20] (-\cmdPAS@prismereg@rayon/2,\cmdPAS@prismereg@hauteur+1) node[left,\cmdPAS@prismereg@axecolor] {\texttt{axe de rotation}}; + \fi + \fi + \ifPAS@prismereg@name + \foreach \i in {1,2,...,\cotes} + { + \pgfmathparse{(360/\cotes)*(\i-1)+\cmdPAS@prismereg@rotat}\let\angle\pgfmathresult + \pgfmathparse{\cmdPAS@prismereg@rayon*cos(\angle)}\let\Mx\pgfmathresult + \pgfmathparse{\cmdPAS@prismereg@incl*sin(\angle)}\let\My\pgfmathresult + \IfStrEq{\angle}{0.1} + { + \def\posname{right} + } + { + \IfStrEq{\angle}{180.0} + { + \def\posname{left} + } + { + \IfStrEq{\angle}{90.0} + { + \def\posname{above} + } + { + \IfStrEq{\angle}{270.0} + { + \def\posname{below} + } + { + \pgfmathparse{\angle<180} + \IfStrEq{\pgfmathresult}{1.0} + { + \pgfmathparse{\angle<90} + \IfStrEq{\pgfmathresult}{1.0} + { + \def\posname{above right} + } + { + \def\posname{above left} + } + } + { + \pgfmathparse{\angle<270} + \IfStrEq{\pgfmathresult}{1.0} + { + \def\posname{below left} + } + { + \def\posname{below right} + } + } + } + } + } + } + \node[\posname,\cmdPAS@prismereg@bordercolor] at (\Mx,\My+\cmdPAS@prismereg@hauteur) {$B_{\i}$}; + } + \fi +} + + +% \pyramreg : dessine une pyramide à base régulière +% Synthaxe : \pyramreg[ n = nombre de côtés de la base (>2) - par défaut : 3, +% bordercolor = ... (par défaut : noir), +% incolor = ... (par défaut : blanc), +% coefopaq = ... (par défaut : 0.5), +% axe (booléen : si oui, axe tracé), +% axecolor = couleur de l'axe (par défaut : rouge), +% name (booléen : si oui, nom du sommet et du centre de la base mentionnés), +% sommet = nom du sommet (par défaut : S), +% posommet = ..., +% centre = nom du centre de la base (par défaut : O), +% scalecentre = coef. d'agrandissement du point du centre de la base, +% poscentre = position du nom du centre de la base (par défaut : below), +% hauteur = ... (par défaut, 5 cm), +% rayon = ... (par défaut, 2 cm), +% legende : booléen, +% incl = coefficient d'inclinaison de la base (par défaut : 1), +% rotat = angle de rotation] + +\define@cmdkey [PAS] {pyramreg} {n}{} +\define@cmdkey [PAS] {pyramreg} {bordercolor}{} +\define@cmdkey [PAS] {pyramreg} {incolor}{} +\define@cmdkey [PAS] {pyramreg} {coefopaq}{} +\define@boolkey[PAS] {pyramreg} {axe}[true]{} +\define@cmdkey [PAS] {pyramreg} {axecolor}{} +\define@boolkey[PAS] {pyramreg} {name}[true]{} +\define@boolkey[PAS] {pyramreg} {legende}[true]{} +\define@cmdkey [PAS] {pyramreg} {sommet}{} +\define@cmdkey [PAS] {pyramreg} {posommet}{} +\define@cmdkey [PAS] {pyramreg} {centre}{} +\define@cmdkey [PAS] {pyramreg} {poscentre}{} +\define@cmdkey [PAS] {pyramreg} {scalecentre}{} +\define@cmdkey [PAS] {pyramreg} {hauteur}{} +\define@cmdkey [PAS] {pyramreg} {rayon}{} +\define@cmdkey [PAS] {pyramreg} {rotat}{} +\define@cmdkey [PAS] {pyramreg} {incl}{} + +\presetkeys [PAS] {pyramreg} { + n = 3, + bordercolor = black, + incolor = white, + coefopaq = 0.5, + axe = false, + axecolor = red, + name = false, + legende = false, + sommet = S, + posommet = above, + centre = O, + poscentre = below, + scalecentre = 1, + hauteur = 5, + rayon = 2, + rotat = 0.1, + incl = 1}{} + +\newcommand*{\pyramreg}[1][]{\pasPyramreg[#1]} + +\def\pasPyramreg[#1]{ + \setkeys[PAS]{pyramreg}{#1} + \def\cotes{\cmdPAS@pyramreg@n} + \pgfmathparse{\cotes-1}\let\cote\pgfmathresult + \ifPAS@pyramreg@legende + \pgfmathparse{\cmdPAS@pyramreg@rayon*cos(-85)+.5}\let\x\pgfmathresult + \pgfmathparse{\cmdPAS@pyramreg@incl*sin(-85)-1}\let\y\pgfmathresult + \draw[<-,>=stealth,dotted,\cmdPAS@pyramreg@incolor] (.5,-.5) to [bend right=30] (\x,\y) node[right,\cmdPAS@pyramreg@incolor] {\texttt{base (polygonale)}}; + \fi + \ifPAS@pyramreg@name + \fill[\cmdPAS@pyramreg@bordercolor] (0,0) circle (\cmdPAS@pyramreg@scalecentre*0.01cm) node[\cmdPAS@pyramreg@bordercolor,\cmdPAS@pyramreg@poscentre] {\cmdPAS@pyramreg@centre}; + \node[\cmdPAS@pyramreg@posommet,\cmdPAS@pyramreg@bordercolor] at (0,\cmdPAS@pyramreg@hauteur) {\cmdPAS@pyramreg@sommet}; + \foreach \i in {1,2,...,\cotes} + { + \pgfmathparse{(360/\cotes)*(\i-1)+\cmdPAS@pyramreg@rotat}\let\angle\pgfmathresult + \pgfmathparse{\cmdPAS@pyramreg@rayon*cos(\angle)}\let\Mx\pgfmathresult + \pgfmathparse{\cmdPAS@pyramreg@incl*sin(\angle)}\let\My\pgfmathresult + \IfStrEq{\angle}{0.1} + { + \def\posname{right} + } + { + \IfStrEq{\angle}{180.0} + { + \def\posname{left} + } + { + \IfStrEq{\angle}{90.0} + { + \def\posname{above} + } + { + \IfStrEq{\angle}{270.0} + { + \def\posname{below} + } + { + \pgfmathparse{\angle<180} + \IfStrEq{\pgfmathresult}{1.0} + { + \pgfmathparse{\angle<90} + \IfStrEq{\pgfmathresult}{1.0} + { + \def\posname{above right} + } + { + \def\posname{above left} + } + } + { + \pgfmathparse{\angle<270} + \IfStrEq{\pgfmathresult}{1.0} + { + \def\posname{below left} + } + { + \def\posname{below right} + } + } + } + } + } + } + \node[\posname,\cmdPAS@pyramreg@bordercolor] at (\Mx,\My) {$A_{\i}$}; + } + \fi + \foreach \i in {1,...,\cote} + { + \pgfmathparse{\cmdPAS@pyramreg@rayon*cos((360/\cotes)*\i+\cmdPAS@pyramreg@rotat)}\let\Mx\pgfmathresult + \pgfmathparse{\cmdPAS@pyramreg@incl*sin((360/\cotes)*\i+\cmdPAS@pyramreg@rotat)}\let\My\pgfmathresult + \pgfmathparse{\cmdPAS@pyramreg@rayon*cos((360/\cotes)*(\i-1)+\cmdPAS@pyramreg@rotat)}\let\Nx\pgfmathresult + \pgfmathparse{\cmdPAS@pyramreg@incl*sin((360/\cotes)*(\i-1)+\cmdPAS@pyramreg@rotat)}\let\Ny\pgfmathresult + \pgfmathparse{\cmdPAS@pyramreg@rayon*cos((360/\cotes)*(\i+1)+\cmdPAS@pyramreg@rotat)}\let\Px\pgfmathresult + \pgfmathparse{\cmdPAS@pyramreg@incl*sin((360/\cotes)*(\i+1)+\cmdPAS@pyramreg@rotat)}\let\Py\pgfmathresult + \IfStrEq{\cotes}{3}{\def\ang{120}}{\def\ang{140}} + \pgfmathparse{(360/\cotes)*\i<181} + \IfStrEq{\pgfmathresult}{1.0}{\draw[dotted,\cmdPAS@pyramreg@bordercolor] (\Nx,\Ny) -- (\Mx,\My);}{\draw[\cmdPAS@pyramreg@bordercolor] (\Nx,\Ny) -- (\Mx,\My);} + \pgfmathparse{(360/\cotes)*\i+\cmdPAS@pyramreg@rotat<\ang} + \IfStrEq{\pgfmathresult}{1.0}{\draw[dotted,\cmdPAS@pyramreg@bordercolor] (\Mx,\My) -- (0,\cmdPAS@pyramreg@hauteur);} + { + \shade[draw=\cmdPAS@pyramreg@bordercolor,shading=ball, ball color=\cmdPAS@pyramreg@incolor,opacity=\cmdPAS@pyramreg@coefopaq] (0,\cmdPAS@pyramreg@hauteur) -- (\Mx,\My) -- (\Px,\Py) -- cycle; + \draw[\cmdPAS@pyramreg@bordercolor] (0,\cmdPAS@pyramreg@hauteur) -- (\Mx,\My) -- (\Px,\Py); + } + } + \pgfmathparse{\cmdPAS@pyramreg@rayon*cos((360/\cotes)*\cote+\cmdPAS@pyramreg@rotat)}\let\Mx\pgfmathresult + \pgfmathparse{\cmdPAS@pyramreg@incl*sin((360/\cotes)*\cote+\cmdPAS@pyramreg@rotat)}\let\My\pgfmathresult + \pgfmathparse{\cmdPAS@pyramreg@rayon*cos(\cmdPAS@pyramreg@rotat)}\let\Nx\pgfmathresult + \pgfmathparse{+\cmdPAS@pyramreg@incl*sin(\cmdPAS@pyramreg@rotat)}\let\Ny\pgfmathresult + \draw[\cmdPAS@pyramreg@bordercolor] (\Mx,\My) -- (\Nx,\Ny) -- (0,\cmdPAS@pyramreg@hauteur); + \ifPAS@pyramreg@axe + \draw[dotted,\cmdPAS@pyramreg@axecolor] (0,\cmdPAS@pyramreg@hauteur) -- (0,-\cmdPAS@pyramreg@incl); + \draw[\cmdPAS@pyramreg@axecolor] (0,\cmdPAS@pyramreg@hauteur) -- (0,\cmdPAS@pyramreg@hauteur+1); + \draw[\cmdPAS@pyramreg@axecolor] (0,-\cmdPAS@pyramreg@incl) -- (0,-\cmdPAS@pyramreg@incl-1); + \ifPAS@pyramreg@legende + \draw[<-,>=stealth',\cmdPAS@pyramreg@axecolor] (0,\cmdPAS@pyramreg@hauteur+.5) to [bend left=20] (-\cmdPAS@pyramreg@rayon/2,\cmdPAS@pyramreg@hauteur) node[left,\cmdPAS@pyramreg@axecolor] {\texttt{axe de rotation}}; + \fi + \fi + \ifPAS@pyramreg@legende + \pgfmathparse{(\cmdPAS@pyramreg@hauteur-\Ny)/2}\let\y\pgfmathresult + \pgfmathparse{1-\cmdPAS@pyramreg@coefopaq}\let\op\pgfmathresult + \draw[<-,>=stealth,\cmdPAS@pyramreg@bordercolor] (\Nx/2,\y) to [bend left=30] (\cmdPAS@pyramreg@rayon+.5,\y+1) node[right,\cmdPAS@pyramreg@bordercolor] {\texttt{arête lat\'erale}}; + \draw[<-,>=stealth,\cmdPAS@pyramreg@bordercolor] (0,\cmdPAS@pyramreg@hauteur) to [bend left=10] (\cmdPAS@pyramreg@rayon+.5,\cmdPAS@pyramreg@hauteur+0.5) node[right,\cmdPAS@pyramreg@bordercolor] {\texttt{sommet}}; + \draw[gray,dotted] (0,\cmdPAS@pyramreg@hauteur) -- (\cmdPAS@pyramreg@rayon+4,\cmdPAS@pyramreg@hauteur); + \draw[gray,dotted] (\cmdPAS@pyramreg@rayon,0) -- (\cmdPAS@pyramreg@rayon+4,0); + \draw[gray,dotted,opacity=\op] (0,0) -- (\cmdPAS@pyramreg@rayon,0); + \draw[<->,>=stealth',\cmdPAS@pyramreg@bordercolor] (\cmdPAS@pyramreg@rayon+4,\cmdPAS@pyramreg@hauteur) -- (\cmdPAS@pyramreg@rayon+4,0) node[midway,right,\cmdPAS@pyramreg@bordercolor] {\texttt{hauteur}}; + \draw[<-,>=stealth,\cmdPAS@pyramreg@incolor] (\Nx/2,.5) to [bend right=30] (\cmdPAS@pyramreg@rayon+.5,-1) node[right,\cmdPAS@pyramreg@incolor] {\texttt{face lat\'erale (triangulaire)}}; + \fi +} + + +% \boule : dessine une boule +% Synthaxe : \boule[border, (booléen : si oui, un bord est dessiné +% bordercolor = ... (par défaut : noir), +% name, (booléen : si oui, le centre est dessiné), +% centre = nom du centre, +% poscentre = position du nom du centre, +% incolor = couleur de remplissage (par défaut : blanc), +% coefopaq = coefficient d'opacité, +% grandcercle (booléen : si oui, le grand cercle est dessiné), +% legende (booléen), +% scale = coefficient d'agrandissement] + +\define@boolkey[PAS] {boule} {border}[true]{} +\define@cmdkey [PAS] {boule} {bordercolor}{} +\define@boolkey[PAS] {boule} {name}[true]{} +\define@cmdkey [PAS] {boule} {centre}{} +\define@cmdkey [PAS] {boule} {poscentre}{} +\define@cmdkey [PAS] {boule} {incolor}{} +\define@cmdkey [PAS] {boule} {coefopaq}{} +\define@boolkey[PAS] {boule} {grandcercle}[true]{} +\define@boolkey[PAS] {boule} {legende}[true]{} +\define@cmdkey [PAS] {boule} {scale}{} + +\presetkeys [PAS] {boule} { border = false, + bordercolor = black, + incolor = white, + coefopaq = 0.5, + centre = O, + poscentre = below, + scale = 1, + grandcercle = false, + legende = false, + name = false}{} + +\newcommand*{\boule}[1][]{\pasBoule[#1]} + +\def\pasBoule[#1]{ + \setkeys[PAS]{boule}{#1} + \begin{scope}[scale=\cmdPAS@boule@scale] + \ifPAS@boule@grandcercle + \draw[\cmdPAS@boule@bordercolor,dotted] (2,0) arc (0:180:2cm and .5cm); + \fi + \ifPAS@boule@name + \fill[\cmdPAS@boule@bordercolor] (0,0) circle (0.01cm) node[\cmdPAS@boule@poscentre,scale=\cmdPAS@boule@scale] {\cmdPAS@boule@centre}; + \fi + \shade[shading=ball, ball color=\cmdPAS@boule@incolor,opacity=\cmdPAS@boule@coefopaq] (0,0) circle (2cm); + \ifPAS@boule@grandcercle + \draw[\cmdPAS@boule@bordercolor] (2,0) arc (0:-180:2cm and .5cm); + \fi + \ifPAS@boule@border + \draw[\cmdPAS@boule@bordercolor] (0,0) circle (2cm); + \fi + \ifPAS@boule@legende + \pgfmathparse{2*cos(-60)}\let\x\pgfmathresult + \pgfmathparse{.5*sin(-60)}\let\y\pgfmathresult + \draw[<-,>=stealth',\cmdPAS@boule@bordercolor] (\x,\y) to [bend right=30] (3,-0.4) node[right,\cmdPAS@boule@bordercolor] {\texttt{un grand cercle}}; + \begin{scope}[rotate=50] + \draw[\cmdPAS@boule@bordercolor!50!black,dotted] (2,0) arc (0:180:2cm and .5cm); + \draw[\cmdPAS@boule@bordercolor!50!black] (2,0) arc (0:-180:2cm and .5cm); + \end{scope} + \pgfmathparse{1.5*cos(38)}\let\x\pgfmathresult + \pgfmathparse{1.5*sin(38)}\let\y\pgfmathresult + \draw[<-,>=stealth',\cmdPAS@boule@bordercolor!50!black] (\x,\y) to [bend right=30] (3,\y) node[right,\cmdPAS@boule@bordercolor!50!black] {\texttt{un autre grand cercle}}; + + \fi + \end{scope} +} + +% \cone : dessine un cône de révolution +% Synthaxe : \cone[bordercolor=couleur des bords, (black par défaut) +% incolor = couleur de la face, (white par défaut) +% coefopaq = coefficient d'opacité (0.5 par défaut), +% rayon = rayon du disque de base, (1 cm par défaut), +% hauteur = hauteur du sommet (3 cm par défaut), +% sommet = nom du sommet, (par défaut : S) +% posommet = position du nom du sommet (par défaut : above), +% centre = nom du centre du disque de base, (par défaut : O), +% incl = coefficient d'inclinaison du disque de base, +% poscentre = position du centre du disque de base (par défaut : below), +% scalecentre = coefficient d'agrendissement du point du centre du disque de base, +% axe : booléen, +% axecolor = couleur de l'axe de révolution, +% legende : booléen, +% name : booléen] + +\define@cmdkey [PAS] {cone} {bordercolor}{} +\define@cmdkey [PAS] {cone} {incolor}{} +\define@cmdkey [PAS] {cone} {hauteur}{} +\define@cmdkey [PAS] {cone} {coefopaq}{} +\define@cmdkey [PAS] {cone} {rayon}{} +\define@cmdkey [PAS] {cone} {sommet}{} +\define@cmdkey [PAS] {cone} {posommet}{} +\define@cmdkey [PAS] {cone} {centre}{} +\define@cmdkey [PAS] {cone} {poscentre}{} +\define@cmdkey [PAS] {cone} {scalecentre}{} +\define@cmdkey [PAS] {cone} {incl}{} +\define@boolkey[PAS] {cone} {name}[true]{} +\define@boolkey[PAS] {cone} {axe}[true]{} +\define@boolkey[PAS] {cone} {legende}[true]{} +\define@cmdkey [PAS] {cone} {axecolor}{} +\presetkeys [PAS] {cone} {bordercolor = black, + incolor = white, + coefopaq = 0.5, + rayon = 1, + hauteur = 3, + sommet = S, + posommet = above, + centre = O, + poscentre = below, + scalecentre = 1, + incl = 0.33, + name = false, + axe = false, + legende = false, + axecolor = red}{} + +\newcommand*{\cone}[1][]{\pasCone[#1]} + +\def\pasCone[#1]{ + \setkeys[PAS]{cone}{#1} + \pgfmathparse{\cmdPAS@cone@incl*\cmdPAS@cone@rayon}\let\petitaxe\pgfmathresult + \pgfmathparse{2*\cmdPAS@cone@rayon}\let\grandaxe\pgfmathresult + \pgfmathparse{0.01*\cmdPAS@cone@scalecentre}\let\centre\pgfmathresult + \draw[dashed,\cmdPAS@cone@bordercolor] (0,0) arc (180:0:\cmdPAS@cone@rayon cm and \petitaxe cm); + \ifPAS@cone@axe + \draw[dotted,\cmdPAS@cone@axecolor] (\cmdPAS@cone@rayon,\cmdPAS@cone@hauteur) -- (\cmdPAS@cone@rayon,-\petitaxe); + \draw[\cmdPAS@cone@axecolor] (\cmdPAS@cone@rayon,\cmdPAS@cone@hauteur) -- (\cmdPAS@cone@rayon,\cmdPAS@cone@hauteur+1); + \draw[\cmdPAS@cone@axecolor] (\cmdPAS@cone@rayon,-\petitaxe) -- (\cmdPAS@cone@rayon,-\petitaxe-1); + \ifPAS@cone@legende + \draw[\cmdPAS@cone@axecolor,<-,>=stealth'] (\cmdPAS@cone@rayon,\cmdPAS@cone@hauteur+.5) to [bend left=30] (\cmdPAS@cone@rayon+1,\cmdPAS@cone@hauteur+1) node[right,\cmdPAS@cone@axecolor] {\texttt{axe de r\'evolution}}; + \fi + \fi + \shade[draw=\cmdPAS@cone@bordercolor,shading=ball, ball color=\cmdPAS@cone@incolor,opacity=\cmdPAS@cone@coefopaq] (0,0) -- (\cmdPAS@cone@rayon,\cmdPAS@cone@hauteur) -- (\grandaxe,0) arc (0:-180:\cmdPAS@cone@rayon cm and \petitaxe cm); + \ifPAS@cone@name + \node[\cmdPAS@cone@posommet,\cmdPAS@cone@bordercolor] at (\cmdPAS@cone@rayon,\cmdPAS@cone@hauteur) {\cmdPAS@cone@sommet}; + \node[\cmdPAS@cone@poscentre,\cmdPAS@cone@bordercolor] at (\cmdPAS@cone@rayon,0) {\cmdPAS@cone@centre}; + \fill[\cmdPAS@cone@bordercolor] (\cmdPAS@cone@rayon,0) circle (\centre cm); + \fi + \ifPAS@cone@legende + \pgfmathparse{\petitaxe*sin(-40)}\let\y\pgfmathresult + \pgfmathparse{\cmdPAS@cone@rayon*(1+cos(-40))}\let\x\pgfmathresult + \draw[\cmdPAS@cone@bordercolor,thick] (\cmdPAS@cone@rayon,\cmdPAS@cone@hauteur) -- (\x,\y); + \draw[<-,>=stealth',\cmdPAS@cone@bordercolor] (\x,\y) to [bend right=30] (2*\cmdPAS@cone@rayon+1,0) node[\cmdPAS@cone@bordercolor,right] {\texttt{g\'en\'eratrice}}; + \draw[black,<-,>=stealth'] (\cmdPAS@cone@rayon,\cmdPAS@cone@hauteur) to [bend right=45] (\cmdPAS@cone@rayon/2,\cmdPAS@cone@hauteur) node[black,below left] {\texttt{sommet}}; + \draw[black,<-,>=stealth'] (\cmdPAS@cone@rayon,0) to [bend right=30] (\cmdPAS@cone@rayon/2,-\petitaxe-.5) node[black,below] {\texttt{centre du disque de base}}; + \fi +} + + +% \cylindre : dessine un cône de révolution +% Synthaxe : \cylindre[bordercolor=couleur des bords, (black par défaut) +% incolor = couleur de la face, (white par défaut) +% coefopaq = coefficient d'opacité (0.5 par défaut), +% rayon = rayon du disque de base, (1 cm par défaut), +% hauteur = hauteur du sommet (3 cm par défaut), +% incl = coefficient d'inclinaison du disque de base, +% centrebas = nom du centre du disque de base, (par défaut : B), +% centrehaut = nom du centre du disque de base, (par défaut : H), +% poscentrebas = position du centre du disque de base (par défaut : below), +% poscentrehaut = position du centre du disque du haut (par défaut : below), +% scalecentre = coefficient d'agrendissement du point du centre du disque de base, +% axe : booléen, +% axecolor = couleur de l'axe de révolution, +% legende : booléen, +% name : booléen] + +\define@cmdkey [PAS] {cylindre} {bordercolor}{} +\define@cmdkey [PAS] {cylindre} {incolor}{} +\define@cmdkey [PAS] {cylindre} {hauteur}{} +\define@cmdkey [PAS] {cylindre} {coefopaq}{} +\define@cmdkey [PAS] {cylindre} {rayon}{} +\define@cmdkey [PAS] {cylindre} {centrebas}{} +\define@cmdkey [PAS] {cylindre} {poscentrebas}{} +\define@cmdkey [PAS] {cylindre} {centrehaut}{} +\define@cmdkey [PAS] {cylindre} {poscentrehaut}{} +\define@cmdkey [PAS] {cylindre} {scalecentre}{} +\define@cmdkey [PAS] {cylindre} {incl}{} +\define@boolkey[PAS] {cylindre} {name}[true]{} +\define@boolkey[PAS] {cylindre} {axe}[true]{} +\define@boolkey[PAS] {cylindre} {legende}[true]{} +\define@boolkey[PAS] {cylindre} {rectgener}[true]{} +\define@cmdkey [PAS] {cylindre} {axecolor}{} +\presetkeys [PAS] {cylindre} {bordercolor = black, + incolor = white, + coefopaq = 0.5, + rayon = 1, + hauteur = 3, + centrebas = B, + poscentrebas = above, + centrehaut = H, + poscentrehaut = below, + scalecentre = 1, + incl = 0.33, + name = false, + axe = false, + legende = false, + rectgener = false, + axecolor = red}{} + +\newcommand*{\cylindre}[1][]{\pasCylindre[#1]} + +\def\pasCylindre[#1]{ + \setkeys[PAS]{cylindre}{#1} + \pgfmathparse{\cmdPAS@cylindre@incl*\cmdPAS@cylindre@rayon}\let\petitaxe\pgfmathresult + \pgfmathparse{2*\cmdPAS@cylindre@rayon}\let\grandaxe\pgfmathresult + \pgfmathparse{0.01*\cmdPAS@cylindre@scalecentre}\let\centre\pgfmathresult + \ifPAS@cylindre@rectgener + \pgfmathparse{\petitaxe*sin(-40)}\let\y\pgfmathresult + \pgfmathparse{\cmdPAS@cylindre@rayon*(cos(-40))}\let\x\pgfmathresult + \filldraw[opacity=2*\cmdPAS@cylindre@coefopaq,fill=\cmdPAS@cylindre@incolor,draw=\cmdPAS@cylindre@bordercolor] (0,0) -- (\x,\y) -- (\x,\y+\cmdPAS@cylindre@hauteur) -- (0,\cmdPAS@cylindre@hauteur); + \ifPAS@cylindre@legende + \draw[\cmdPAS@cylindre@bordercolor,<-,>=stealth'] (.75*\x,.75*\y+.3) to [bend right=45] (1.3*\x,2*\y) node[right,\cmdPAS@cylindre@bordercolor] {\texttt{rectangle g\'en\'erateur}}; + \fi + \fi + \draw[dashed,\cmdPAS@cylindre@bordercolor] (\cmdPAS@cylindre@rayon,0) arc (0:180:\cmdPAS@cylindre@rayon cm and \petitaxe cm); + \ifPAS@cylindre@axe + \draw[dotted,\cmdPAS@cylindre@axecolor] (0,\cmdPAS@cylindre@hauteur) -- (0,-\petitaxe); + \draw[\cmdPAS@cylindre@axecolor] (0,\cmdPAS@cylindre@hauteur) -- (0,\cmdPAS@cylindre@hauteur+1); + \draw[\cmdPAS@cylindre@axecolor] (0,-\petitaxe) -- (0,-\petitaxe-1); + \ifPAS@cylindre@legende + \draw[\cmdPAS@cylindre@axecolor,<-,>=stealth'] (0,\cmdPAS@cylindre@hauteur+.5) to [bend left=30] (1,\cmdPAS@cylindre@hauteur+1) node[right,\cmdPAS@cylindre@axecolor] {\texttt{axe de r\'evolution}}; + \fi + \fi + \shade[draw=\cmdPAS@cylindre@bordercolor,shading=ball, ball color=\cmdPAS@cylindre@incolor,opacity=\cmdPAS@cylindre@coefopaq] (-\cmdPAS@cylindre@rayon,0) arc (180:360:\cmdPAS@cylindre@rayon cm and \petitaxe cm) -- (\cmdPAS@cylindre@rayon,\cmdPAS@cylindre@hauteur) arc (0:180:\cmdPAS@cylindre@rayon cm and \petitaxe cm) -- cycle; + \draw[draw=\cmdPAS@cylindre@bordercolor] (-\cmdPAS@cylindre@rayon,0) arc (180:360:\cmdPAS@cylindre@rayon cm and \petitaxe cm) -- (\cmdPAS@cylindre@rayon,\cmdPAS@cylindre@hauteur) arc (0:180:\cmdPAS@cylindre@rayon cm and \petitaxe cm) -- cycle; + \draw[draw=\cmdPAS@cylindre@bordercolor] (-\cmdPAS@cylindre@rayon,\cmdPAS@cylindre@hauteur) arc (180:360:\cmdPAS@cylindre@rayon cm and \petitaxe cm); + \ifPAS@cylindre@name + \node[\cmdPAS@cylindre@poscentrehaut,\cmdPAS@cylindre@bordercolor] at (0,\cmdPAS@cylindre@hauteur) {\cmdPAS@cylindre@centrehaut}; + \node[\cmdPAS@cylindre@poscentrebas,\cmdPAS@cylindre@bordercolor] at (0,0) {\cmdPAS@cylindre@centrebas}; + \fill[\cmdPAS@cylindre@bordercolor] (0,0) circle (\centre cm); + \fill[\cmdPAS@cylindre@bordercolor] (0,\cmdPAS@cylindre@hauteur) circle (\centre cm); + \fi + \ifPAS@cylindre@legende + \draw[dotted,\cmdPAS@cylindre@bordercolor] (\cmdPAS@cylindre@rayon,0) -- (\cmdPAS@cylindre@rayon+1,0); + \draw[dotted,\cmdPAS@cylindre@bordercolor] (\cmdPAS@cylindre@rayon,\cmdPAS@cylindre@hauteur) -- (\cmdPAS@cylindre@rayon+1,\cmdPAS@cylindre@hauteur); + \draw[<->,>=stealth',\cmdPAS@cylindre@bordercolor] (\cmdPAS@cylindre@rayon+1,0) -- (\cmdPAS@cylindre@rayon+1,\cmdPAS@cylindre@hauteur) node[midway,right,\cmdPAS@cylindre@bordercolor] {\texttt{hauteur}}; + \draw[black,<-,>=stealth',\cmdPAS@cylindre@bordercolor] (-0.5*\cmdPAS@cylindre@rayon,0.5*\cmdPAS@cylindre@hauteur) to [bend right=45] (-1.2*\cmdPAS@cylindre@rayon,0.5*\cmdPAS@cylindre@hauteur+.3) node[\cmdPAS@cylindre@bordercolor,left] {\texttt{face lat\'erale}}; + \fi +} + + +% \cube : dessine un cube +% Synthaxe : \cube[bordercolor=couleur voulue pour les bords, - par défaut : black (noir) +% incolor = couleur d'intérieur, - par défaut : white (blanc) +% angle = angle de la perspective, - par défaut : 45° +% coefopaq = coefficient d'opacité - par défaut : 0.5, +% name (booléen : si mentionné, noms des sommets apparents, +% prof = profondeur pour un parallélépipède rectangle, +% scale = agrandissement, +% legende : booléen pour mettre les légendes ou pas] + +\define@cmdkey [PAS] {cube} {bordercolor}{} +\define@cmdkey [PAS] {cube} {incolor}{} +\define@cmdkey [PAS] {cube} {angle}{} +\define@cmdkey [PAS] {cube} {coefopaq}{} +\define@cmdkey [PAS] {cube} {scale}{} +\define@cmdkey [PAS] {cube} {prof}{} +\define@boolkey[PAS] {cube} {name}[true]{} +\define@boolkey[PAS] {cube} {legende}[true]{} +\presetkeys [PAS] {cube} {angle = 45, + bordercolor = black, + incolor = white, + coefopaq = 0.5, + prof = 1, + scale = 1, + legende = false, + name = false}{} + +\newcommand*{\cube}[1][]{\pasCube[#1]} + +\def\pasCube[#1]{ + \setkeys[PAS]{cube}{#1} + \begin{scope}[scale=\cmdPAS@cube@scale] + \shade[draw=\cmdPAS@cube@bordercolor,shading=ball, ball color=\cmdPAS@cube@incolor,opacity=\cmdPAS@cube@coefopaq] (0,0) -- (1,0) -- (1,1) -- (0,1) -- cycle; + \pgfmathparse{\cmdPAS@cube@prof*cos(\cmdPAS@cube@angle)/2}\let\x\pgfmathresult + \pgfmathparse{\cmdPAS@cube@prof*sin(\cmdPAS@cube@angle)/2}\let\y\pgfmathresult + \pgfmathparse{1+\x}\let\xx\pgfmathresult + \pgfmathparse{1+\y}\let\yy\pgfmathresult + \draw[dotted,\cmdPAS@cube@bordercolor] (0,0) -- (\x,\y) -- (\xx,\y); + \draw[dotted,\cmdPAS@cube@bordercolor] (\x,\y) -- (\x,\yy); + \shade[draw=\cmdPAS@cube@bordercolor,shading=ball, ball color=\cmdPAS@cube@incolor,opacity=\cmdPAS@cube@coefopaq] (0,1) -- (\x,\yy) -- (\xx,\yy) -- (1,1) -- cycle; + \filldraw[draw=\cmdPAS@cube@bordercolor,shading=ball, ball color=\cmdPAS@cube@incolor,opacity=\cmdPAS@cube@coefopaq] (1,0) -- (1,1) -- (\xx,\yy) -- (\xx,\y) -- cycle; + \ifPAS@cube@name + \node[below left,\cmdPAS@cube@bordercolor] at (0,0) {A}; + \node[below right,\cmdPAS@cube@bordercolor] at (1,0) {B}; + \node[below right,\cmdPAS@cube@bordercolor] at (\xx,\y) {C}; + \node[below,\cmdPAS@cube@bordercolor] at (\x,\y) {D}; + \node[left,\cmdPAS@cube@bordercolor] at (0,1) {E}; + \node[below right,\cmdPAS@cube@bordercolor] at (1,1) {F}; + \node[right,\cmdPAS@cube@bordercolor] at (\xx,\yy) {G}; + \node[above,\cmdPAS@cube@bordercolor] at (\x,\yy) {H}; + \fi + \ifPAS@cube@legende + \pgfmathparse{(\xx-1)/2+1}\let\xxx\pgfmathresult + \pgfmathparse{(\yy-1)/2+1}\let\yyy\pgfmathresult + \draw[<-,>=stealth',\cmdPAS@cube@bordercolor] (.5,0) to [bend right=30] (2,0) node[right,\cmdPAS@cube@bordercolor] {\texttt{arête}}; + \IfStrEq{\cmdPAS@cube@incolor}{white}{\def\c{black}}{\def\c{\cmdPAS@cube@incolor}} + \draw[<-,>=stealth',\c] (\xxx,.5) to [bend left=30] ($(\xxx,.5)+(1,0.25)$) node[right,\c] {\texttt{face}}; + \fill[\cmdPAS@cube@bordercolor] (1,1) circle (0.01cm); + \draw[<-,>=stealth',\cmdPAS@cube@bordercolor] (1,1) to [bend left=45] ($(\xx,\yy)+(0.25,0.25)$) node[right,\cmdPAS@cube@bordercolor] {\texttt{sommet}}; + \fi + \end{scope} +} |