Frédéric Léon -- FORMATIONS -- LaTeX

Quelques commandes en PsTicks

Je voulais refaire rapidement la figure du DNB Métropole septembre 2017, car celle de l'APMEP (merci à tous ceux qui retapent les sujets !!) contenait une erreur.

spirale DNB

ma première idée fut de passer par les coordonnées polaires :

\psline[linecolor=blue](0,0)(1,0)(!1.5 60 sin)%
    (!0.5 3 60 sin mul)(!-1.5 3 60 sin mul)%
    (-3, 0)(!-1.5 -3 60 sin mul)(!2.5 -3 60 sin mul)(!4.5 60 sin)
    

mais pour cela j'ai du me dessiner une grille isométrique et réfléchir un peu : j'espérais trouver une solution plus "Tortue". PsTricks propose la commande \rlineto ... mais je n'ai pas réussi à compiler correctement !?!
La solution est dans le package pstricks-add avec les commandes \psStartPoint et \psVector et

\psStartPoint(0,0)
\psVector[linecolor=blue, arrows=-](1,0)(1;60)(2;120)(-3,0)(3;-120)(3;-60)(4,0)(4;60)
    

ou bien

\psVector[linecolor=blue, arrows=-]<0,0>(1,0)(1;60)(2;120)(-3,0)(3;-120)(3;-60)(4,0)(4;60)
    

pour dessiner une grille isométrique avec PsTricks avec un chemin dessus.

\psset{unit=1cm}
\begin{pspicture}(-.5,-1)(7,4)
    %\psgrid
    \def\trieq{\pspolygon[linewidth=.75pt, linecolor=blue](0,0)(1;-60)(1,0)} % pointe vers le bas
    \def\ligne{\multido{\i=0+1}{5}{\rput(\i,0){\trieq}}}
    \multido{\i=1+1}{3}{\rput(\i;60){\ligne}}
    \psline[linewidth=2pt, linecolor=black]{<->}(4;60)(0,0)(6,0)
    \psVector[linecolor=red, linewidh=1.5pt, arrows=->]<5,0>(3;120)(3;-120)%
        (2;120)(5;0)(1;120)
\end{pspicture}
    

Octobre 2019, je découvre : pst-turtle sur CTAN !

Scratch

Je voulais

Si certains veulent tester, envoyer des retours... le fichier .tex et le rendu .pdf

Courbe passant par des points donnés avec la pente donnée

Le fichier .pdf à télécharger (le fichier .tex en pièce jointe dans le fichier .pdf).

Utilisation du package xkeyval chargé par pstricks-add .

%~ usage : \PstCubique(x1,y1,p1)(x2,y2,p2) etc.
%~ (xi,yi) sont les coordonnées du i-ème point (abscisses croissantes)
%~ pi le coefficient directeur de la tangente en ce point
%~ \PstTraceTangente(-5,-4,.25)(-3,0,2.5)
%~ \PstCubique[linecolor=blue, linewidth=1pt]%
%~      (-5,-4,.25)(-3,0,2.5)(-2,3,1.5)(0,4.5,0)(2,1,-2)(3,0,0)(5,-3,-3)
%~ \uput[90](-5,-4){$\mathscr C_f$}
%~ \PstTraceTangente[linewidth=2pt, linecolor=green!50!blue](-3,-4,-1)(-1,-5,0)
%~ \PstCubique[AffPts=true, linecolor=purple, linestyle=dashed]%
%~     (-5,1,-2)(-3,-4,-1)(-1,-5,0)(0,-4,1)(2,0,3)(5,4,0)
%~ \uput[90](-5,1){$\mathscr C_g$}
%~ 
\makeatletter

\pst@addfams{FLpst} % famille pour les nouveaux paramètres psset
\define@key[psset]{FLpst}{TanDx}{\def\psk@TanDx{#1 }} %longueur en abscisse de la tangente
\psset[FLpst]{TanDx=.5}
\newif\ifPst@AffPts % affichage des points sur la courbe
\define@key[psset]{FLpst}{AffPts}[true]{\@nameuse{Pst@AffPts#1}}
\psset[FLpst]{AffPts=false}

\def\PstTraceTangente{\def\pst@par{}\pst@object{PstTraceTangente}}
\def\PstTraceTangente@i{%
    % (#1,#2,#3) coordos point + pente (TanDx = longueur en abscisse)
    \begingroup
    \psset{arrows=<->, linecolor=red, linewidth=1.5pt} % param par défaut
    \use@par % paramètres choisis par utilisateur = remplacent ceux par défaut
    \PstTraceTangente@ii
}%traceTg

\def\PstTraceTangente@ii(#1,#2,#3){
    \rput(#1,#2){
        \psline(!\psk@TanDx\space #3 \psk@TanDx\space mul)%
            (!\psk@TanDx\space neg #3 \psk@TanDx\space mul neg)%
    }
    \@ifnextchar({\PstTraceTangente@ii}{\endgroup}
}

\def\CubiqueInterpolation(#1,#2,#3)(#4,#5,#6){% calcul des coeffs : XCas
    \psplot{#1}{#4}{%
    % je n'ai pas réussi à mieux simplifier les expressions des coeffs
    /xa #1 def /ya #2 def /ta #3 def
    /xb #4 def /yb #5 def /tb #6 def
    /Dx xb xa sub def /Dy yb ya sub def
    /St tb ta add def /Sx xb xa add def
    /denom Dx 3 exp def
    /a Dx St mul 2 Dy mul sub denom div def
    /b  St Dx Sx mul mul neg 3 Sx Dy mul mul
        Dx ta xb mul tb xa mul add mul
        sub add
        denom div def
    /c  Sx xb xb ta mul mul xa xa tb mul mul sub mul
        2 xa xb xb tb mul xa ta mul sub 3 Dy mul sub mul mul mul add
        denom div def
    /d  xa xb Dx xb ta mul xa tb mul add mul mul mul neg
        xa xa yb xa 3 xb mul sub mul mul mul neg
        xb xb ya xb 3 xa mul sub mul mul mul
        add add
        denom div def
    a x mul b add x mul c add x mul d add}
}

\def\Cubique@next{\@ifnextchar({\Cubique@job}{\Cubique@end}}
\def\Cubique@end{\endgroup}
\def\Cubique(#1,#2,#3){% Initialise la récurrence
    \def\Cubique@xa{#1}% garde les paramètres de A_0
    \def\Cubique@ya{#2}%
    \def\Cubique@pa{#3}%
    \ifPst@AffPts
        \psdot(#1,#2)
    \fi%
    \Cubique@next% interpolation entre A_0 et A_1
}
\def\Cubique@job(#1,#2,#3){%
    \CubiqueInterpolation(\Cubique@xa,\Cubique@ya,\Cubique@pa)(#1,#2,#3)%
    \def\Cubique@xa{#1}%
    \def\Cubique@ya{#2}%
    \def\Cubique@pa{#3}%
    \ifPst@AffPts
        \psdot(#1,#2)
    \fi%
    \Cubique@next% interpolation entre A_n et A_{n+1}
}

\def\PstCubique{%
    \def\pst@par{}\pst@object{PstCubique}
}

\def\PstCubique@i{%
    \begingroup
    \psset{dotstyle=o, dotsize=3pt 2} % paramètres par défauts
    \use@par % paramètres utilisateur
    \Cubique
}

\makeatother