<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">\chapter{Dessiner avec PSTricks}

% Date de la derniÃ¨re MÃ&nbsp;J : 26/02/2019

\label{chap-pstricks}\lettrine{I}{l} n'y a rien de pire que d'apprendre une notion, de l'apprÃ©hender, d'expÃ©rimenter\dots{} pour se rendre compte qu'une autre est meilleure et qu'il faille tout recommencer depuis le dÃ©but.

C'est ce qui m'est arrivÃ© avec PSTricks. J'ai appris Ã&nbsp; dessiner avec ce package, qui requiert de compiler avec le moteur \LaTeX{} ou \XeLaTeX{}. Puis, j'ai dÃ©couvert \TikZ{}, qui fonctionne avec n'importe quel moteur de compilation. \\

Je ne vais pas supprimer mon travail initial. Tu peux le consulter. La derniÃ¨re mise Ã&nbsp; jour de ce chapitre date du 26 fÃ©vrier 2019. Dans tous les cas, \textbf{je te recommande de passer directement au chapitre suivant} sur \TikZ{}.

\section{Fonctionnement gÃ©nÃ©ral}

Selon le dessin Ã&nbsp; rÃ©aliser, il faut charger un ou plusieurs packages :

\begin{itemize}[label = \ding{213}]
\item \verb?pstricks? : la base pour dessiner avec PSTricks ;

\item \verb?pst-circ? : pour dessiner des circuits Ã©lectriques ;

\item \verb?pst-node? : pour dessiner des diagrammes ;

\item \verb?pst-eucl? : pour dessiner des figures gÃ©omÃ©triques ;

\item \verb?pstricks-add? : pour ajouter de nouvelles commandes, comme la rotation d'objets par exemple. \\
\end{itemize}

Ensuite, pour indiquer Ã&nbsp; \LaTeX{} que nous souhaitons dessiner une image avec PSTricks, il faut utiliser l'environnement \verb?pspicture?, suivi de la taille maximale de l'image au format \verb?(x_max,y_max)?.

Une option supplÃ©mentaire, \verb?[showgrid = true]?, est trÃ¨s utile pour visualiser le rÃ©sultat avec un quadrillage en arriÃ¨re-plan. Ce dernier permet de corriger des points mal placÃ©s ou de faciliter les dÃ©calages Ã&nbsp; faire. \\

Bon, allons faire quelques essais pour mieux saisir le principe de fonctionnement.

\section{Dessiner des circuits Ã©lectriques}

Le principe de fonctionnement est trÃ¨s simple. Imagine que tu dessines ton circuit Ã©lectrique sur une feuille de papier. Dans le coin infÃ©rieur gauche, tu places un repÃ¨re et son origine puis tu considÃ¨res qu'un composant, un fil, etc. revient Ã&nbsp; se dÃ©placer d'une unitÃ©.

HonnÃªtement, si tu es arrivÃ© jusqu'Ã&nbsp; cette partie du guide, tu devrais pouvoir aller jeter un coup d'\oe{}il Ã&nbsp; l'aide du package sans problÃ¨me, surtout pour avoir accÃ¨s Ã&nbsp; toutes les options disponibles. Voici deux petits exemples pour te mettre en bouche :

% Impossible de gÃ©nÃ©rer le rÃ©sultat avec codedisplay ==&gt; utiliser coderesult si insertion souhaitÃ© d'un visuel...
\begin{code}{Un cas minimaliste}
\documentclass[a4paper, 12pt]{report}   

% LaTeX // XeLaTeX
\usepackage{lmodern}
\usepackage[french]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\usepackage{amsmath, amsfonts, amssymb}

\usepackage[dvipsnames]{xcolor} % Pour les couleurs si besoin
\usepackage{pst-circ} % Pour les circuits Ã©lectriques


\begin{document}

\everymath{\displaystyle}

\begin{pspicture}[showgrid = true](5,2)
% showgrid affiche le quadrillage
% Permet de se repÃ©rer au dÃ©but et en cas d'erreur
% A mettre sur false lors de la gÃ©nÃ©ration du rÃ©sultat final

% Composants
\resistor(1,1)(2,1){$R$}
% Les coordonnÃ©es Ã&nbsp; renseigner sont celles des extrÃ©mitÃ©s du composant
\coil[dipolestyle = curved](3,1)(4,1){$L$}
	
% Fils
\wire[intensitylabel = $I$, intensitycolor = red, intensitylabelcolor = red](0,1)(1,1)
\wire(2,1)(3,1)
\wire(4,1)(5,1)
	
% Annotations
\tension[labeloffset = -0.5](0.5,0.5)(2.5,0.5){$V$}
% Si coordonnÃ©es non entiÃ¨res, utiliser un point
\end{pspicture}

\end{document}
\end{code}

\begin{code}{Un cas plus complet}
\documentclass[a4paper, 12pt]{report}   

% LaTeX // XeLaTeX
\usepackage{lmodern}
\usepackage[french]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\usepackage{amsmath, amsfonts, amssymb}

\usepackage[dvipsnames]{xcolor} % Pour les couleurs si besoin
\usepackage{pst-circ} % Pour les circuits Ã©lectriques


\begin{document}

\everymath{\displaystyle}

\begin{pspicture}[showgrid = true](8,3)
% Composants
\resistor(2,1)(2,2){$R$}
\coil[dipolestyle = curved](4,1)(4,2){$L$} % Un affichage possible pour une bobine
\coil[dipolestyle = elektor](6,3)(7,3){$l$} % Un autre format d'affichage
\resistor(8,1)(8,2){$\frac{r}{g}$}
	
% Fils
\wire[intensitylabel = $I$, intensitylabeloffset = 0.5](0,3)(2,3)
\wire(2,3)(4,3)
\wire[intensitylabel = $I'$](4,3)(6,3)
\wire(7,3)(8,3)
\wire(0,0)(8,0)
\wire(2,0)(2,1)
\wire(2,2)(2,3)
\wire(4,0)(4,1)
\wire(4,2)(4,3)
\wire(8,0)(8,1)
\wire(8,2)(8,3)
	
% Annotations
\tension(0,0)(0,3){$V$}
\end{pspicture}

\end{document}
\end{code}

\begin{conseil}{Conseil personnel}
La gÃ©nÃ©ration sous \XeLaTeX{} peut se rÃ©vÃ©ler assez longue, surtout si tu cumules de nombreux circuits.

AprÃ¨s des essais, le temps d'attente est nÃ©gligeable avec une compilation sous \LaTeX{}, suivie des conversions d'usage \verb?Dvi -&gt; PS? puis \verb?PS -&gt; PDF?. 

Tu peux donc Ã©ventuellement rÃ©diger tout ton rapport avec ce dernier moteur de compilation. Pour rappel, ce dernier ne tolÃ¨re pas les fichiers \verb?.png? ou \verb?.jpg? pour les images. Il faut donc les convertir en fichier \verb?.eps?, grÃ¢ce au logiciel \GIMP{} par exemple.
\end{conseil}

\begin{attention}{\textit{Nota Bene}}
Tu as peut-Ãªtre dÃ©jÃ&nbsp; remarquÃ© que le guide de \verb?pst-circ? utilise une commande \verb?\pnode? pour dÃ©finir les n\oe{}uds et leur donner une lettre. \\

Il ne s'agit en aucun d'une obligation, comme l'attestent mes prÃ©cÃ©dents exemples. Personnellement, pour un petit schÃ©ma, je ne recommande pas de le faire. Je trouve que c'est plus beaucoup plus long s'il faut dÃ©placer des points. 

Cette solution se rÃ©vÃ¨le toutefois plus pratique pour de grands schÃ©mas, s'il y a beaucoup de changements Ã&nbsp; rÃ©aliser avant d'obtenir le rÃ©sultat souhaitÃ© et si tu as beaucoup de points communs, par exemple.
\end{attention}

Bon, si tu viens de te rendre compte que \LaTeX{} est extrÃªmement puissant pour dessiner des circuits d'aussi bonne qualitÃ©, sache que ce n'est pas fini. Allons dessiner tout court.

\section{Dessiner tout court}

Pour dessiner avec PSTricks, le principe est extrÃªmement similaire : tu dÃ©finis des traits ou des formes Ã&nbsp; partir de coordonnÃ©es et \LaTeX{} trace le tout. C'est parti avec un exemple :

\begin{code}{Un premier dessin : transmission de la chaleur}
\documentclass[a4paper, 12pt]{report}   

% LaTeX // XeLaTeX
\usepackage{lmodern}
\usepackage[french]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\usepackage{amsmath, amsfonts, amssymb}

\usepackage[dvipsnames]{xcolor}
\usepackage{pstricks}
% Pas besoin du package xcolor ici
% pstricks l'importe automatiquement


\begin{document}

% Coefficient de transmission thermique d'une paroi
\begin{pspicture}(7,4)
\psline[linecolor = Green](1.5,4)(1.5,0) % Pour tracer une ligne
\psline(2.5,4)(2.5,0)
\psline(3.5,4)(3.5,0)
\psline(4.5,4)(4.5,0)
\psline[linecolor = Green](5.5,4)(5.5,0)
\psline[linecolor = red]{-&gt;}(0,2)(7,2)
	
\psframe[fillstyle = hlines](1.5,0)(2.5,4) % Pour tracer un rectangle
\psframe[fillstyle = vlines](3.5,0)(4.5,4)
\psframe[fillstyle = crosshatch](4.5,0)(5.5,4)
	
\rput(2,-0.25){1} % Pour placer une information
\rput(3,-0.25){2}
\rput(4,-0.25){3}
\rput(5,-0.25){4}
\rput(1.5,4.25){\textcolor{Green}{$T_{S_a}$}}
\rput(5.5,4.25){\textcolor{Green}{$T_{S_b}$}}
\rput(7,1.75){\textcolor{red}{$\Phi$}}
\rput(0,3){Ambiance a}
\rput(7,3){Ambiance b}
\rput(0,2.5){$T_a$}
\rput(7,2.5){$T_b$}
\end{pspicture}

\end{document}
\end{code}

\begin{code}{Un second dessin : tracÃ© et hachurage}
\documentclass[a4paper, 12pt]{report}   

% LaTeX // XeLaTeX
\usepackage{lmodern}
\usepackage[french]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\usepackage{amsmath, amsfonts, amssymb}

\usepackage{pstricks}
% Pas besoin du package xcolor ici
% pstricks l'importe automatiquement


\begin{document}

% CrÃ©ation d'un domaine hachurÃ©
\begin{pspicture}(7,7)
% RepÃ¨re
\psline{-&gt;}(0,1)(7,1)
\psline{-&gt;}(1,0)(1,7)
\uput[d](7,1){$t_A$} % Plus pratique pour placer une indication dÃ©calÃ©e
% d = down ; u = up ; l = left ; r = right
\uput[ul](1,7){$t_B$} % Combinaison de position possible DANS CET ORDRE (lu ne fonctionne pas)

\pscircle[fillcolor = black, fillstyle = solid](6,1){0.1} % Pour tracer un cercle + le remplir
\uput[d](6,1){30}
	
% CarrÃ© et Delta_t (domaine hachurÃ©)
\psline(6,1)(6,6)(1,6)
\pspolygon[linecolor = red, hatchcolor = red, fillstyle = hlines](3,1)(6,4)(6,6)(4,6)(1,3)(1,1)(3,1)
\rput(6.4,6.4){\textcolor{red}{$\Delta_t$}}
	
\pscircle[linecolor = red, fillcolor = red, fillstyle = solid](3,1){0.1}
\rput(3,0.6){\textcolor{red}{$t$}}
\pscircle[linecolor = red, fillcolor = red, fillstyle = solid](1,3){0.1}
\rput(0.6,3){\textcolor{red}{$t$}}	
\end{pspicture}

\end{document}
\end{code}

\begin{conseil}{Pour plus de commandes}
Je ne vois aucun intÃ©rÃªt Ã&nbsp; faire une liste des commandes et des options possibles. Je t'ai fourni deux exemples pour que tu aies un aperÃ§u du rendu et des possibilitÃ©s mais Ã&nbsp; toi d'aller te documenter par la suite. \\

Je te recommande particuliÃ¨rement d'aller sur : \url{http://fr.wikibooks.org/wiki/LaTeX/Dessiner_avec_LaTeX/Dessiner_avec_PSTricks}. C'est assez complet.
\end{conseil}

\section{Utiliser des coordonnÃ©es}

Dans une optique d'automatisation des dessins (un systÃ¨me d'amortisseur en mÃ©canique ou un circuit RLC, utilisÃ©s de nombreuses fois, par exemple), il faudrait pouvoir crÃ©er une commande.

L'argument principal de cette commande serait alors un point de dÃ©part pour le schÃ©ma (en bas Ã&nbsp; gauche, en haut Ã&nbsp; droite ou ailleurs, au choix). Sous PSTricks, il s'agirait d'un n\oe{}ud (\verb?node?) et tous les autres sont dÃ©finis Ã&nbsp; partir de ce n\oe{}ud d'origine (dÃ©calage des abscisses et des ordonnÃ©es). \\

L'origine sert donc de ``point d'ancrage'' pour positionner le dessin et le reste est construit automatiquement. Pour ce faire, il faut procÃ©der de la maniÃ¨re suivante :

\begin{itemize}[label = \ding{118}]
\item en plus de \verb?pstricks?, charger le package \verb?pst-node? ;

\item dÃ©finir tous les n\oe{}uds grÃ¢ce Ã&nbsp; la commande : \begin{center} \verb?\psnodes(x1,y1){noeud1}..(xN,yN){noeudN}?\end{center}

En l'occurrence, le n{\oe}ud 1 est l'origine ; \verb?(x1,y1)? est donc remplacÃ© par \verb?(#1)? (argument de la commande) ;

\item dÃ©finir les \verb?(xi,yi)? en commenÃ§ant par un \verb?!? et selon la mÃ©thode NPI (cf. encadrÃ© ci-aprÃ¨s) ;

\item rÃ©cupÃ©rer les coordonnÃ©es selon l'une des deux maniÃ¨res suivantes :

\begin{itemize}[label = \ding{213}]
\item utiliser la commande \verb?\psGetNodeCenter{noeudi} noeudi.Z?, oÃ¹ \verb?Z? correspond Ã&nbsp; \verb?x? ou \verb?y? (respectivement, rÃ©cupÃ©ration de l'abscisse ou de l'ordonnÃ©e),

\item \textbf{ou bien,} introduire la commande \verb?saveNodeCoors? dans les options de l'environnement \verb?pspicture? et utiliser ensuite la syntaxe \verb?N-noeudi.Z?. \\
\end{itemize}
\end{itemize}

Il est aussi possible de dÃ©finir des longueurs pour continuer de gÃ©nÃ©raliser la commande, comme nous le verrons dans l'exemple qui va suivre.

\begin{definition}{La Notation Polonaise Inverse}
{\noindent\huge\bfseries\color{gray!75}\og}

La notation polonaise inverse (NPI) (en anglais RPN pour \textit{Reverse Polish Notation}), Ã©galement connue sous le nom de notation post-fixÃ©e, permet d'Ã©crire de faÃ§on non ambiguÃ« les formules arithmÃ©tiques sans utiliser de parenthÃ¨ses.

{\hfill\huge\bfseries\color{gray!75}\fg} \\

\begin{flushright}
WikipÃ©dia -- Disponible sur :

\url{https://fr.wikipedia.org/wiki/Notation_polonaise_inverse}
\end{flushright}

ConcrÃ¨tement, pour utiliser un exemple, l'opÃ©ration $((1 + 2) \times 4) + 3$ peut Ãªtre notÃ©e en NPI \verb?1 2 + 4 x 3 +?. Il suffit de partir de la gauche, de prendre deux Ã©lÃ©ments et un opÃ©rateur, de faire le calcul et de le remplacer. Pour dÃ©tailler, nous avons donc ici :

\begin{itemize}[label = \ding{213}]
\item \verb?1 2 + 4 x 3 +? : prendre \verb?1 2 +? qui devient $1 + 2$ soit 3 ;

\item passage Ã&nbsp; \verb?3 4 x 3 +? : prendre \verb?3 4 x? qui devient $3 \times 4$ soit 12 ;

\item passage Ã&nbsp; \verb?12 3 +? qui devient $12 + 3$ soit 15. \\
\end{itemize}

Dans le cadre de PSTricks, le fonctionnement est le mÃªme sauf que les opÃ©rateurs suivants sont utilisÃ©s : \verb?add?, \verb?sub?, \verb?mul? et \verb?div?, respectivement pour addition, soustraction, multiplication et division.
\end{definition}

Avec des exemples commentÃ©s, nous obtenons des cas d'utilisation possibles :

\begin{code}{Exemple abstrait (boÃ®te)}
% Compiler avec le moteur LaTeX
\documentclass[a4paper, 12pt]{report}

\usepackage{lmodern}
\usepackage[french]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\usepackage{amsmath, amsfonts, amssymb}

\usepackage[dvipsnames]{xcolor}
\usepackage{pstricks, pst-node, pstricks-add} 
% pst-node pour les noeuds et le calcul de nouvelles coordonnÃ©es
% pstricks-add pour la commande \psrotate

\newcommand{\textedbox}[4]{\pnodes(#1){origine}(#2){fin}
\psframe[#3](origine)(fin) 
\rput(!N-fin.x N-origine.x add 2 div N-fin.y N-origine.y add 2 div){\parbox{\linewidth}{\centering{}#4}}}


\begin{document}

\begin{pspicture}[showgrid = true, saveNodeCoors](10,5)
% saveNodeCoors ssi utilisation de N-node_name.x/y
\def\longueur{4 } % Espace OBLIGATOIRE (sinon rien ne s'affiche)
\def\decalage{0.5 }
% DÃ©finition de longueurs
% PossibilitÃ© de les mettre en argument d'une commande

% Une option brute
\pnodes(1,1){origine}(!\psGetNodeCenter{origine} origine.x 
\longueur add origine.y \longueur add){fin}
\psframe(origine)(fin)
\psline[linecolor = violet]{|&lt;-&gt;|}(!N-origine.x N-origine.y 
\decalage sub)(!N-fin.x N-fin.y \longueur \decalage add sub)
% NE PAS Ã©crire \longueur{}...

% Une commande crÃ©Ã©e avec l'option saveNodeCoors
\rput(4,0){\psrotate(2.5,2.5){90}{\textedbox{0,2}{5,3}{linecolor = red, framearc = 0.5, linestyle = dashed, fillstyle = hlines, hatchcolor = gray}{\textcolor{cyan}{Texte}}}}

% Une autre possibilitÃ©	
\rput(9,2.5){\psframebox[linecolor = orange, framesep = 13pt]{\Large{}Test}}
\end{pspicture}

\end{document}
\end{code}

\begin{code}{Exemple concret (amortisseur)}
% Compiler avec le moteur LaTeX
\documentclass[a4paper, 12pt]{report}

\usepackage{lmodern}
\usepackage[french]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\usepackage{amsmath, amsfonts, amssymb}

\usepackage[dvipsnames]{xcolor}
\usepackage{pstricks, pst-node} 
% pst-node pour les noeuds et le calcul de nouvelles coordonnÃ©es

\newcommand{\amortisseur}[3]{\pnodes(#1,#2){A}(!#1 1 sub #2){B}(!#1 1 sub #2 1 add){C}(!#1 #2 1 add){D}(!#1 0.5 sub #2 1 add){F}(!#1 0.5 sub #2){E}(!#1 0.5 sub #2 0.5 add){G}(!#1 0.5 add #2 0.5 add){H}(!#1 1 sub #2 0.5 add){I}(!#1 2 sub #2 0.5 add){J}(!#1 0.5 sub #2){K}\psline(A)(B)(C)(D) \psline(F)(E) \psline(G)(H) \psline(I)(J) \uput[d](K){#3}}


\begin{document}

Un cas plus concret avec un amortisseur (taille fixe), moins Ã©lÃ©gante mais qui fonctionne :

\begin{pspicture}[showgrid = true](3,2)
\amortisseur{2}{0.5}{$\mu$}
\end{pspicture}

\end{document}
\end{code}

Comme tu peux le constater, la dÃ©finition des n\oe{}uds avec cette mÃ©thode est, certes, laborieuse mais peut se rÃ©vÃ©ler trÃ¨s pratique avec la possibilitÃ© de crÃ©er des commandes : au lieu d'avoir une entrÃ©e pour l'abscisse de l'origine et une autre pour son ordonnÃ©e, tout passe avec un argument et PSTricks fait le reste.

Autrement, dans la dÃ©finition des n\oe{}uds, avec cette notation, il ne faut \textbf{pas oublier} le \verb?!? et il est important de noter que la sÃ©paration des abscisses et des ordonnÃ©es se fait \textbf{SANS} virgule\footnote{Pourquoi ? Je n'en sais rien, Ã§a marche comme Ã§a et c'est trÃ¨s bien. Mais il doit bien y avoir une raison\dots{}}.

\section{Des boÃ®tes pour le texte}

Peut-Ãªtre l'as-tu remarquÃ© dans mon prÃ©cÃ©dent exemple abstrait mais il est possible de crÃ©er des boÃ®tes avec le texte centrÃ©, et plein d'autres options. 

Ma commande, dÃ©finie dans l'exemple prÃ©cÃ©dent, serait ``parfaite'' (de mon point de vue) s'il Ã©tait possible d'extraire la longueur de la boÃ®te pour l'intÃ©grer comme argument de la \verb?parbox?. Sans succÃ¨s pour l'instant. 

Mais il semblerait qu'elle fonctionne grÃ¢ce Ã&nbsp; un petit \verb?\linewidth?. Tant mieux. \\

Sinon, il existe d'autres possibilitÃ©s sous PSTricks comme la commande \verb?\PSTextFrame?. Une piste Ã&nbsp; explorer !

\section{RÃ©aliser des intersections}

Tu as envie de tracer un contour qui correspond Ã&nbsp; l'intersection de deux cercles mais tu ne sais pas comment faire\dots{} Pas de panique, il existe une solution. Je vais prÃ©senter celle disponible sous PSTricks, mÃªme s'il en existe une aussi sous \TikZ{} (comme elles portent le mÃªme nom, la documentation est facile Ã&nbsp; trouver).

Il faut rÃ©aliser un \verb?clip?. Le fonctionnement est trÃ¨s simple : tu dÃ©finis la zone d'intersection puis tu places un objet assez grand (comme un rectangle) et paf ! Tu obtiens des Chocapics\dots{} bon ok, quand mÃªme pas mais le rÃ©sultat escomptÃ© est lÃ&nbsp; et c'est le plus important.

\begin{code}{RÃ©aliser des intersections}
% Compiler avec le moteur LaTeX
\documentclass[a4paper, 12pt]{report}

\usepackage{lmodern}
\usepackage[french]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\usepackage[dvipsnames]{xcolor}
\usepackage{pstricks}


\begin{document}

\begin{pspicture}[showgrid = true](5,5)
% Chemin de coupure / clip
\psclip{
	\pscircle[linestyle = none](1,2){2}
	\pscircle[linestyle = none](4,2){2}
}
% linestyle = none pour ne pas le dessiner

% Remplir l'intÃ©rieur du chemin
\psframe*[linecolor = Cyan](0,0)(4,4) 
\endpsclip{}

% Affichage du contour du chemin de coupure
\pscircle(1,2){2} 
\pscircle(4,2){2}
\end{pspicture}

\vspace{2\baselineskip}

\begin{pspicture}[showgrid = true](5,5)
% Chemin de coupure / clip
\psclip{
	\rput{-30}(0,2){\psframe[linestyle = none](0,0)(3,2)} 
	% psrotate inopÃ©rant --&gt; travailler avec rput (partir de (0,0), rotation puis dÃ©calage)
	\pscircle[linestyle = none](4,2){2}
}
% Remplir l'intÃ©rieur du chemin
\psframe*[linecolor = Cyan](0,0)(4,4)
\endpsclip{}
\end{pspicture}

\end{document}
\end{code}

\section{Extraction du contour d'une image}

Il existe une image, une icÃ´ne bien spÃ©cifique que tu as envie de rÃ©exploiter mais elle est trop petite et les pixels sont apparents au moindre zoom. Ou bien tu tiens Ã&nbsp; la crÃ©er toi-mÃªme sous \LaTeX{} pour obtenir une image vectorielle\dots{} mais autant passer par un logiciel spÃ©cialisÃ© parfois (Photoshop, InDesign, etc.).

MÃªme si le rÃ©sultat n'est pas encore parfait, il est possible de vectoriser une image, plus particuliÃ¨rement sur des images monochromes. Le plus dur et le seul point qui nous importe est l'obtention du contour de l'image. DÃ¨s que nous avons les coordonnÃ©es des points, \verb?\psline? suffit, quitte Ã&nbsp; ajouter des options pour le remplissage. \\

Par contre, pour rÃ©ussir Ã&nbsp; obtenir les coordonnÃ©es du contour en question, il faut bidouiller de la maniÃ¨re suivante :

\begin{itemize}[label = \ding{118}]
\item vectoriser l'image sous \Inkscape{}, la lisser si nÃ©cessaire (enlever les bosses superflues\dots{}) ;

\item exporter le rÃ©sultat au format \verb?.tex? (option \verb?Enregistrer sous?) ;

\item ouvrir le code obtenu, vÃ©rifier les dimensions utilisÃ©es puis Ã©purer le code, c'est-Ã&nbsp;-dire ne garder que les coordonnÃ©es et enlever les commandes s'il y en a ;

\item simplifier les coordonnÃ©es (beaucoup de dÃ©cimales pas forcÃ©ment utiles, surtout Ã&nbsp; la vue des dimensions utilisÃ©es). PossibilitÃ© de laisser ce traitement Ã&nbsp; un algorithme (proposition d'un algorithme Python ci-aprÃ¨s),

\item insÃ©rer les coordonnÃ©es obtenues dans le code \LaTeX{} final de ton image ;

\item bien reporter les dimensions ou les ajuster si besoin. Par exemple : \begin{center} \verb?\psset{xunit = 0.5pt, yunit = 0.5pt}? \end{center}
\end{itemize}

Normalement, le rÃ©sultat n'est pas trop moche. Tu peux le lisser sous PSTricks sans effort en utilisant la commande \verb?\pscurve? au lieu de \verb?\psline?. \`A toi de jouer !\footnote{Yu-Gi-Oh oh oh\dots{}}

\begin{code}[listing options = {style = mainlststyle, language = Python, xleftmargin = 17pt, numbers = left, numbersep = 13pt, numberstyle = \ttfamily\footnotesize\color{orange!50!red}, keywordstyle = \color{blue}, stringstyle = \color{orange}}]{Simplifier les coordonnÃ©es : un algorithme Python}
def reduction(chaine, nombre) :
    """RÃ©duire la valeur des dÃ©cimales Ã&nbsp; "nombre" d'une liste de coordonnÃ©es (x,y) (variable chaine)"""
    resultat = ""
    i = 0
    while i &lt;= len(chaine) - 1 : 
        # CoordonnÃ©e x
        while chaine[i] != "." : 
        # On implÃ©mente et on cherche le point (sÃ©parateur des dÃ©cimales)
            resultat = resultat + chaine[i]
            i = i + 1
        for j in range(0, nombre + 1) : 
        # On implÃ©mente la quantitÃ© de dÃ©cimales voulues (nombre)
            resultat = resultat + chaine[i + j]
        i = i + nombre + 1
        while chaine[i] != "," : 
        # On a implÃ©mentÃ© le nombre souhaitÃ© de dÃ©cimales 
        # --&gt; aller Ã&nbsp; l'autre coordonnÃ©es
            i = i + 1
        
        # CoordonnÃ©e y
        while chaine[i] != "." : # Idem
            resultat = resultat + chaine[i]
            i = i + 1
        for j in range(0, nombre + 1) : # Idem
            resultat = resultat + chaine[i + j]
        i = i + nombre + 1
        while chaine[i] != ")" : # Idem
            i = i + 1
        resultat = resultat + chaine[i]
        i = i + 1
    print(resultat)

chaine = "(13.10458,13.112)(13.10458,13.112)(13.10458,13.112)"
nombre = 2
reduction(chaine, nombre)
\end{code}</pre></body></html>