\listfiles \documentclass[a4paper,fleqn]{article} \usepackage[utf8]{inputenc} \usepackage[T1]{fontenc} \usepackage{amsmath,amssymb} \usepackage[frenchb]{babel} %\usepackage{mathptmx} \usepackage[charter]{mathdesign} \usepackage[margin=2.5cm]{geometry} \usepackage{multicol} \usepackage{listings} \usepackage[svgnames]{xcolor} \usepackage{showexpl} \usepackage[nomessages]{fp} \usepackage{xspace} \usepackage{pst-plot,pst-solides3d,pst-anamorphosis-add,pst-3d} \usepackage{pst-grad} \usepackage[absolute,notitlepage]{pst-abspos} \usepackage{url} \psset{path=C:/Dokumente und Einstellungen/Besitzer/Desktop/bergen/bergen/} %\def\epsRoot{C:/Dokumente und Einstellungen/Besitzer/Desktop/bergen/bergen/} \renewcommand{\ttdefault}{lmtt} \definecolor{syracuseGRIS}{HTML}{C1C1C1} \definecolor{syracuseVERT}{HTML}{029235} \definecolor{sepia}{rgb}{1,0.8,0.8} \definecolor{grisclair}{rgb}{0.8,0.8,0.8} \definecolor{BleuCiel}{cmyk}{0.2,0,0,0} \definecolor{OrangePale}{cmyk}{0,0.2,0.4,0} \lstset{% language=[LaTeX]TeX,% float=hbp,% basicstyle=\ttfamily\small, % texcsstyle=*\color{blue},% identifierstyle=\color{black}, % keywordstyle=\color{syracuseVERT}, % otherkeywords={$, \{, \}, \[, \]}, stringstyle=\color{syracuseVERT}, % commentstyle=\color{syracuseVERT}, % backgroundcolor=\color{syracuseGRIS!30},% columns=flexible, % tabsize=4, % frame=single, % %frame=shadowbox, % %rulesepcolor=\color{syracuseGRIS!30},% extendedchars=true, % showspaces=false, % showstringspaces=false, % numbers=left, numbersep=0.8em, numberstyle=\tiny, % breaklines=true, % breakautoindent=true,% captionpos=b,% xleftmargin=1em,% sensitive=true,% morekeywords=[6]{pspicture,center},% keywordstyle=[6]\color{FireBrick},% %morekeywords=[7]{(,)},% %keywordstyle=[7]\color{syracuseVERT} } \renewcommand{\lstlistingname}{Source} \renewcommand{\labelitemi}{$\bullet$} \newcommand\cs[1]{\texttt{\char`\\#1}} \newcommand\file[1]{\texttt{#1}} \parindent0pt \parskip5pt \def\syracuseTitle{Les anamorphoses : liste des macros et des options} %\def\syracuseGraphic{eiffel2} \begin{document} %% === BEGIN == Page de garde ================================================= \thispagestyle{empty} \pstPutAbs(0,-29.7){% \begin{pspicture}(0,0)(21,29.7) \pspolygon[fillstyle=solid,linecolor=syracuseVERT,fillcolor=syracuseVERT](0,0)(10.5,14.85)(21,0) \pspolygon[fillstyle=solid,linecolor=syracuseGRIS,fillcolor=syracuseGRIS](0,0)(21,29.7)(0,29.7) \pspolygon[fillstyle=solid,linecolor=syracuseGRIS!50,fillcolor=syracuseGRIS!50](21,0)(10.5,14.85)(21,29.7) \end{pspicture} } \pstPutAbs(2.5,-3.75){% \includegraphics[scale=1]{pst-anamorphosis} } \pstPutAbs(2.5,-5.25){% \LARGE \textbf{\syracuseTitle} } \pstPutAbs(2.5,-13.5){% \begin{pspicture}(0,0)(8,8) \rput(4,4){\includegraphics[height=8cm]{eiffel}} %\rput(4,4){\includegraphics[height=8cm]{\syracuseGraphic}} %\psframe(0,0)(8,8) \end{pspicture} } \pstPutAbs(12.5,-15){% \parbox{0.4\textwidth}{\Large\raggedleft {\LARGE\textbf{Contributeurs}}\\[0.2cm] J\"{u}rgen \textsc{Gilg}\\ Manuel \textsc{Luque}\\ Jean-Michel \textsc{Sarlat} }} \vfill \begin{center} \textcolor{white}{\textbf{\today}}\\[0.3cm] \textcolor{white}{\url{http://melusine.eu.org/syracuse/G/pst-anamorphosis/}}\\ \includegraphics[scale=0.4]{logo_syracuse} \end{center} %% == END == Page de garde ==================================================== \newpage \begin{abstract} Le package `\textsf{pst-anamorphosis}' est compos\'{e}, actuellement, de \mbox{deux~parties~:} \begin{itemize} \item `\textsf{pst-anamorphosis}' qui permet d'afficher l'anamorphose d'un fichier au format \textsf{.eps} ; \item `\textsf{pst-anamorphosis-add}' qui est son compl\'{e}ment et qui adapte certaines macros de \textsf{PSTricks} comme \verb+\psline+ et d'autres d\'{e}taill\'{e}es par la suite, au trac\'{e} d'anamorphoses personnelles dessin\'{e}es avec ces commandes. De plus, cette partie permet l'affichage de texte anamorphos\'{e} et de dessins au format \textsf{.pst} c'est-\`{a}-dire compos\'{e} de commandes \textsf{PSTricks}. \end{itemize} Ce package permet de calculer et dessiner les images anamorphiques planes obtenues par les anamorphoses suivantes : \begin{enumerate} \item cylindrique ; \item conique ; \item sph\'{e}rique ; \item perspective ; \item perspective invers\'{e}e. \end{enumerate} \end{abstract} \section{\textbackslash{}psanamorphosis} \verb+\psanamorphosis[options](x,y){fichier.eps}+ dessine l'image et l'image anamorphique au point de coordonn\'{e}es $(x,y)$. Si les coordonn\'{e}es ne sont pas pr\'{e}cis\'{e}es l'origine est $(0,0)$. Les \textbf{options}, avec leurs valeurs par d\'{e}faut : \begin{itemize} \item Le type d'anamorphose \textsf{[type=cylindrical] }, voici les autres : % \begin{itemize} \item \textsf{conical} \item \textsf{spherical} \item \textsf{perspective} \item \textsf{inverseperspective} \end{itemize} % \item le rayon du cylindre, de la sph\`{e}re et de la base du c\^{o}ne : \textsf{Rmirror=3} ; \item la hauteur du c\^{o}ne, la cote du sommet : \textsf{Zs=5} \item l'abscisse de l'observateur (du point de vue, d'o\`{u} la lettre \textsf{v}) : \textsf{Xv=0} ; \item l'ordonn\'{e}e de l'observateur : \textsf{Yv=-10} ; \item la cote de l'observateur : \textsf{Zv=10} ; \item l'ordonn\'{e}e du point de fuite principal $F$ : \textsf{F=10} ; \item la distance de $F$ \`{a} $F'$ : \textsf{D=4} ; \item l'unit\'{e} du quadrillage ou plut\^{o}t le demi-c\^{o}t\'{e} du carr\'{e} : \textsf{ua=2}. \item Un bool\'{e}en \textsf{[drawanamorphosis=true]} qui dessine l'image anamorphique et qui positionn\'{e} \`{a} \textsf{[false]} permet de faire des essais de dimensions et de cadrage par rapport au \textit{cercle} de base du miroir ; \item un facteur d'\'{e}chelle \textsf{[scale=1 1]} suivant $x$ et $y$ pour adapter les dimensions de l'image au miroir. \item Une option permettant de choisir, \'{e}ventuellement, le chemin du r\'{e}pertoire contenant les images au format eps :\textsf{[path=]}, il est vide par d\'{e}faut, ce qui implique que les images sont dans le m\^{e}me r\'{e}pertoire que le fichier de travail. Il faut signaler une particularit\'{e} li\'{e}e \`{a} l'interpr\'{e}teur postscript, que ce soit sous Windows ou Linux il ne doit pas comporter de \textbackslash{}. On pourra utiliser par exemple : \verb+\psset{path=C:/Dokumente und Einstellungen/Besitzer/Desktop/workfolder/}+ \end{itemize} \section{pst-anamorphosis-add} \subsection{Les macros \textbackslash{}pscircleA, \textbackslash{}pscurveA, \textbackslash{}psccurveA, \textbackslash{}psbezierA, \mbox{\textbackslash{}pnodeA} et \textbackslash{}movetoA} Ces commandes sont calqu\'{e}es sur celles de PStricks, elles ont donc les m\^{e}mes options, elles s'adaptent automatiquement au type d'anamorphose choisi. \subsection{Un texte} \verb+\pstextA[options](x,y){texte}+ permet de placer le texte centr\'{e} au point de coordonn\'{e}es~$(x,y)$. Les options de texte : \begin{itemize} \item le type de fonte \textsf{[PSfont=Times-Roman]} ; \item la taille en pts \textsf{[fontsize=40]} ; \item un facteur d'\'{e}chelle \textsf{[scale=1 1]}, comme pour les images. \end{itemize} \subsection{Un fichier \textsf{.pst}} Une commande sp\'{e}cifique permet le calcul et l'affichage des fichiers au format \textbf{.pst} : \mbox{\textbf{\textbackslash{}AFP\{fichier.pst\}}.} Cette image peut \^{e}tre mise \`{a} une \'{e}chelle diff\'{e}rente ou d\'{e}plac\'{e}e si le type d'anamorphose choisie le n\'{e}cessite, comme dans l'exemple suivant : \begin{lstlisting} \psset{Rmirror=3,scale=-0.5 -0.5,translate=0 1.5,type=conical} \AFP{tiger.pst} \end{lstlisting} \newpage \section{Exemples} \subsection{Anamorphose cylindrique} L'anamorphose cylindrique est celle qui est trac\'{e}e par d\'{e}faut si aucun type n'est sp\'{e}cifi\'{e}. Comme options, elle ne n\'{e}cessite que le rayon du cylindre, l'abscisse et l'ordonn\'{e}e du point de vue, comme nous l'avons vu dans la partie th\'{e}orique la cote du point de vue n'intervient pas. Comme tous les autres types d'anamorphoses, le dessin pourra \^{e}tre mis \`{a} l'\'{e}chelle, si n\'{e}cessaire, avec l'option \textsf{[scale=sx sy]}. \begin{center} \psscalebox{0.8}{ \begin{pspicture}[showgrid](-8,-4)(8,10) \pscircle[doubleline=true]{3} \psset{Yv=100,linestyle=dotted} \psanamorphosis[scale=1 -1]{mickey.eps} \multido{\n=-2.00+0.50}{9}{% \pnode(! \n\space -2.00){A} \pnode(! \n\space 2.00){B} \psline(A)(B) \pslineA(A)(B) } \multido{\N=-2.00+0.50}{9}{% \pnode(!-2.0 \N){A} \pnode(!2.0 \N){B} \pslineA(A)(B) \psline(A)(B) } \pstextA[fontsize=25,scale=1.5 -1,fillcolor=black](0,-3){Mickey} \end{pspicture} } \end{center} \begin{lstlisting} \begin{pspicture}[showgrid](-8,-4)(8,10) \pscircle[doubleline=true]{3} \psset{Yv=100,linestyle=dotted} \psanamorphosis[scale=1 -1]{mickey.eps} \multido{\n=-2.00+0.50}{9}{% \pnode(! \n\space -2.00){A} \pnode(! \n\space 2.00){B} \psline(A)(B) \pslineA(A)(B) } \multido{\N=-2.00+0.50}{9}{% \pnode(!-2.0 \N){A} \pnode(!2.0 \N){B} \pslineA(A)(B) \psline(A)(B) } \pstextA[fontsize=25,scale=1.5 -1,fillcolor=black](0,-3){Mickey} \end{pspicture} \end{lstlisting} \subsection{Anamorphose conique} Comme options, l'anamorphose conique ne n\'{e}cessite que le rayon de la base du c\^{o}ne \textsf{Rmirror=3}, la hauteur du c\^{o}ne et la cote \textsf{Zv=10} du point de vue. \begin{center} \begin{pspicture}[showgrid](-6,-6)(6,6) \pscircle[doubleline=true]{3} \psset{type=conical} \psanamorphosis[scale=0.25 0.25](0,-1.5){parrot.eps} \psanamorphosis[scale=-0.25 -0.25](0,1.5){parrot.eps} \psset{linestyle=dotted} \multido{\n=-1.50+0.50}{7}{% \pnode(! \n\space -2.50){A} \pnode(! \n\space -0.50){B} \psline(A)(B) \pslineA(A)(B) } \multido{\N=-2.50+0.50}{5}{% \pnode(!-1.50 \N){A} \pnode(!1.50 \N){B} \pslineA(A)(B) \psline[linecolor=green](A)(B) } \multido{\n=-1.50+0.50}{7}{% \pnode(! \n\space 2.50){A} \pnode(! \n\space 0.50){B} \psline(A)(B) \pslineA(A)(B) } \multido{\N=2.50+-0.50}{5}{% \pnode(!-1.50 \N){A} \pnode(!1.50 \N){B} \pslineA(A)(B) \psline(A)(B) } \pstextA[fontsize=10,fillcolor=green,scale=1.5 1](0,-0.75){Le perroquet} \pstextA[fontsize=10,fillcolor=green,scale=1.5 -1](0,0.75){Le perroquet} \end{pspicture} \end{center} \begin{lstlisting} \begin{pspicture}[showgrid](-6,-6)(6,6) \pscircle[doubleline=true]{3} \psset{type=conical} \psanamorphosis[scale=0.25 0.25](0,-1.5){parrot.eps} \psanamorphosis[scale=-0.25 -0.25](0,1.5){parrot.eps} \psset{linestyle=dotted} \multido{\n=-1.50+0.50}{7}{% \pnode(! \n\space -2.50){A} \pnode(! \n\space -0.50){B} \psline(A)(B) \pslineA(A)(B) } \multido{\N=-2.50+0.50}{5}{% \pnode(!-1.50 \N){A} \pnode(!1.50 \N){B} \pslineA(A)(B) \psline[linecolor=green](A)(B) } \multido{\n=-1.50+0.50}{7}{% \pnode(! \n\space 2.50){A} \pnode(! \n\space 0.50){B} \psline(A)(B) \pslineA(A)(B) } \multido{\N=2.50+-0.50}{5}{% \pnode(!-1.50 \N){A} \pnode(!1.50 \N){B} \pslineA(A)(B) \psline(A)(B) } \pstextA[fontsize=10,fillcolor=green,scale=1.5 1](0,-0.75){Le perroquet} \pstextA[fontsize=10,fillcolor=green,scale=1.5 -1](0,0.75){Le perroquet} \end{pspicture} \end{lstlisting} \subsection{Anamorphose h\'{e}misph\'{e}rique} L'anamorphose sph\'{e}rique poss\`{e}de comme options le rayon du la sph\`{e}re et les 3 coordonn\'{e}es du point de vue. C'est la plus d\'{e}licate \`{a} mettre au point pour que tous les rayons r\'{e}fl\'{e}chis par le miroir parviennent \`{a} l'\oe{}il. \begin{center} \psscalebox{0.75}{ \begin{pspicture}[showgrid](-7,-19)(7,5) \pscircle[doubleline=true]{5} \psset{type=spherical,Rmirror=5} \psanamorphosis[scale=0.4 0.4](0,-4){tiger.eps} {\psset{linewidth=0.5\pslinewidth} \multido{\n=-1.00+0.20}{11}{% \pnode(! \n\space -4.80){A} \pnode(! \n\space -3.20){B} \psline(A)(B) \pslineA(A)(B) }% \multido{\N=-4.80+0.20}{9}{% \pnode(!-1.0 \N){A} \pnode(!1.0 \N){B} \pslineA(A)(B) \psline(A)(B) }% } \psbezier[linecolor=red,showpoints=true](-2,-4)(-1,-3.2)(1,-4)(2,-3) \psbezierA[showpoints=true,linecolor=red](-2,-4)(-1,-3.2)(1,-4)(2,-3) \end{pspicture} } \end{center} \begin{lstlisting} \begin{pspicture}[showgrid](-7,-19)(7,5) \pscircle[doubleline=true]{5} \psset{type=spherical,Rmirror=5} \psanamorphosis[scale=0.4 0.4](0,-4){tiger.eps} {\psset{linewidth=0.5\pslinewidth} \multido{\n=-1.00+0.20}{11}{% \pnode(! \n\space -4.80){A} \pnode(! \n\space -3.20){B} \psline(A)(B) \pslineA(A)(B) }% \multido{\N=-4.80+0.20}{9}{% \pnode(!-1.0 \N){A} \pnode(!1.0 \N){B} \pslineA(A)(B) \psline(A)(B) }% } \psbezier[linecolor=red,showpoints=true](-2,-4)(-1,-3.2)(1,-4)(2,-3) \psbezierA[showpoints=true,linecolor=red](-2,-4)(-1,-3.2)(1,-4)(2,-3) \end{pspicture} \end{lstlisting} \subsection{Anamorphose oblique ou perspective} Les options sont particuli\`{e}res : \begin{itemize} \item l'ordonn\'{e}e du point de fuite principal $F$ : \textsf{F=10} ; \item la distance de $F$ \`{a} $F'$ : \textsf{D=4} \item l'unit\'{e} du quadrillage ou plut\^{o}t le demi-c\^{o}t\'{e} du carr\'{e} : \textsf{ua=2}. \item Un bool\'{e}en \textsf{perpsective=true} qui repr\'{e}sente l'objet trait\'{e} en perspective et qui positionn\'{e} \`{a} \textsf{false} donne la repr\'{e}sentation invers\'{e}e c'est-\`{a}-dire l'anamorphose oblique. \end{itemize} \begin{center} \begin{pspicture}(-4,-3)(4,11) \psgrid[subgriddiv=0,gridcolor=lightgray,griddots=10,gridlabels=4pt](-3,-3)(3,3) \psset{ua=3,F=12,D=2} \psanamorphosis[type=perspective,scale=0.75 0.75](0,0){parrot.eps} \psset{type=perspective} \multido{\i=-3+1}{7}{% \pnode(! \i\space -3){A} \pnode(! \i\space 3){B} \psline(A)(B) \pslineA[linecolor=red](A)(B) }% \multido{\i=-3+1}{7}{% \pnode(!-3 \i){A} \pnode(!3 \i){B} \pslineA[linecolor=blue](A)(B) \psline(A)(B) }% \pstextA[fontsize=35,fillcolor=green](-2.5,2){P} \pstextA[fontsize=35,fillcolor=green](-2.5,1){A} \pstextA[fontsize=35,fillcolor=green](-2.5,0){R} \pstextA[fontsize=35,fillcolor=green](-2.5,-1){R} \pstextA[fontsize=35,fillcolor=green](-2.5,-2){O} \pstextA[fontsize=35,fillcolor=green](-2.5,-3){T} \end{pspicture} \end{center} \begin{lstlisting} \begin{pspicture}(-4,-3)(4,12) \psgrid[subgriddiv=0,gridcolor=lightgray,griddots=10,gridlabels=4pt](-3,-3)(3,3) \psset{ua=3,F=12,D=2} \psanamorphosis[type=perspective,scale=0.75 0.75](0,0){parrot.eps} \psset{type=perspective} \multido{\i=-3+1}{7}{% \pnode(! \i\space -3){A} \pnode(! \i\space 3){B} \psline(A)(B) \pslineA[linecolor=red](A)(B) }% \multido{\i=-3+1}{7}{% \pnode(!-3 \i){A} \pnode(!3 \i){B} \pslineA[linecolor=blue](A)(B) \psline(A)(B) }% \pstextA[fontsize=35,fillcolor=green](-2.5,2){P} \pstextA[fontsize=35,fillcolor=green](-2.5,1){A} \pstextA[fontsize=35,fillcolor=green](-2.5,0){R} \pstextA[fontsize=35,fillcolor=green](-2.5,-1){R} \pstextA[fontsize=35,fillcolor=green](-2.5,-2){O} \pstextA[fontsize=35,fillcolor=green](-2.5,-3){T} \end{pspicture} \end{center} \end{lstlisting} \subsection{Perspective invers\'{e}e} Ceci est extrait de la page 59 du Baltru\v{s}a\"{\i}tis : \begin{quote}\itshape <<~L'arrangement peut fonctionner dans les deux sens. Si le carr\'{e} en perspective se pr\'{e}sente comme un trap\`{e}ze, le trap\`{e}ze y appara\^{\i}t comme un carr\'{e}. Un renversement du point de vue ramen\'{e} au dessus du point principal (\`{a} une hauteur \'{e}gale \`{a} l'\'{e}loignement de la distance) et install\'{e} en quelque sorte dans le tableau, aboutit \`{a} un effet contraire. Les m\^{e}mes r\'{e}tr\'{e}cissements corrigent les formes et les rapprochent au lieu de les \'{e}loigner et de les alt\'{e}rer, comme dans un film \`{a} l'envers. La perspective est \`{a} rebours.~>> \end{quote} \begin{center} \psscalebox{1.5}{ \begin{pspicture}(-3,-5)(3,3) \psgrid[subgriddiv=0,gridcolor=lightgray,griddots=10,gridlabels=6pt](-3,-3)(3,-5) \psset{ua=3,F=14,D=3,type=inverseperspective,linewidth=0.5\pslinewidth} \multido{\i=-3+1}{7}{% \pnode(! \i\space -3){A} \pnode(! \i\space 3){B} \psline(A)(B) \pslineA(A)(B) }% \multido{\i=-3+1}{7}{% \pnode(!-3 \i){A} \pnode(!3 \i){B} \pslineA(A)(B) \psline(A)(B) }% \psanamorphosis{tiger.eps} \psset{fillcolor={[cmyk]{0.2 0.55 0.85 0.0}},linecolor={[cmyk]{0.2 0.55 0.85 0.0}},fontsize=40,scale=1.32 1} \pstextA(0,2){TIGRE*} \pstextA(-2.48,1){I} \pstextA(-2.48,0){G} \pstextA(-2.48,-1){R} \pstextA(-2.48,-2){E} \pstextA(-2.48,-3){*} \end{pspicture} } \end{center} \begin{lstlisting} \begin{pspicture}(-3,-4)(3,3) \psgrid[subgriddiv=0,gridcolor=lightgray,griddots=10,gridlabels=6pt](-3,-3)(3,-6) \psset{ua=3,F=14,D=3,type=inverseperspective,linewidth=0.5\pslinewidth} \multido{\i=-3+1}{7}{% \pnode(! \i\space -3){A} \pnode(! \i\space 3){B} \psline(A)(B) \pslineA(A)(B) }% \multido{\i=-3+1}{7}{% \pnode(!-3 \i){A} \pnode(!3 \i){B} \pslineA(A)(B) \psline(A)(B) }% \psanamorphosis{tiger.eps} \psset{fillcolor={[cmyk]{0.2 0.55 0.85 0.0}},linecolor={[cmyk]{0.2 0.55 0.85 0.0}},fontsize=40,scale=1.32 1} \pstextA(0,2){TIGRE*} \pstextA(-2.48,1){I} \pstextA(-2.48,0){G} \pstextA(-2.48,-1){R} \pstextA(-2.48,-2){E} \pstextA(-2.48,-3){*} \end{pspicture} \end{lstlisting} \section{Les fichiers \textsf{pst}} \begin{center} \begin{pspicture}[showgrid](-5,-6)(5,3) \rput(0,-1.3333){% \psscalebox{0.6667}{% \begin{pspicture}(-6,-8)(6,4) \psset{Xv=0,Yv=-100} \pscircle[doubleline=true,linecolor=black]{3} \input{luckyluke.pst} \AFP{luckyluke.pst} \psset{linewidth=0.5\pslinewidth} \multido{\n=-2.00+0.50}{9}{% \pnode(! \n\space -2.00){A} \pnode(! \n\space 2.00){B} \psline(A)(B) \pslineA(A)(B) } \multido{\N=-2.00+0.50}{9}{% \pnode(!-2.0 \N){A} \pnode(!2.0 \N){B} \pslineA(A)(B) \psline(A)(B) } \end{pspicture} }} \end{pspicture} \end{center} \begin{lstlisting} \begin{pspicture}(-6,-8)(6,4) \psset{Xv=0,Yv=-100} \pscircle[doubleline=true,linecolor=black]{3} \input{luckyluke.pst} \AFP{luckyluke.pst} \psset{linewidth=0.5\pslinewidth} \multido{\n=-2.00+0.50}{9}{% \pnode(! \n\space -2.00){A} \pnode(! \n\space 2.00){B} \psline(A)(B) \pslineA(A)(B) } \multido{\N=-2.00+0.50}{9}{% \pnode(!-2.0 \N){A} \pnode(!2.0 \N){B} \pslineA(A)(B) \psline(A)(B) } \end{pspicture} \end{lstlisting} Les fichiers \textsf{.pst} sont des fichiers de commandes PSTricks obtenues par conversion d'un fichier \textsf{.eps} au moyen d'un script \'{e}crit par Jean-Michel \textsc{Sarlat}. L'anamorphose d'une telle image est obtenue \`{a} l'aide d'une seule commande \verb+\AFP{luckyluke.pst}+ (AFP $=$ \textbf{A}namorphose \`{a} partir d'un \textbf{F}ichier \textbf{P}STricks). De tels fichiers pourront donc \^{e}tre obtenues au moyen du script ou bien directement sur le serveur de \textsf{syracuse} (adresse \`{a} pr\'{e}ciser). En fonction de la complexit\'{e} du fichier (du nombre de lignes de commandes qu'il contient) il sera n\'{e}cessaire d'allouer un suppl\'{e}ment de m\'{e}moire \`{a} \TeX. Par exemple, sous Windows, \`{a} partir de MiK\TeX~2.8, Alexander \textsc{Grahn} donne la proc\'{e}dure \`{a} suivre dans la documentation de son package : `\textsf{animate}' \begin{lstlisting} 1. Open a DOS command prompt window (execute `cmd.exe' via `Start'! `Run'). 2. At the DOS prompt, enter initexmf --edit-config-file=latex 3. Type main_memory=10000000 into the editor window that opens, save the file and quit the editor. 4. To rebuild the format, enter initexmf --dump=latex 5. Repeat steps 2-4 with config initexmf --edit-config-file=pdflatex main_memory=10000000 initexmf --dump=pdflatex initexmf --edit-config-file=xelatex main_memory=10000000 initexmf --dump=xelatex \end{lstlisting} \section{Normalisation d'une image au format \textsf{.eps}} Il est souvent n\'{e}cessaire de ``pr\'{e}parer'' l'image \`{a} anamorphoser. Voici le d\'{e}tail de la proc\'{e}dure suivie \`{a} partir d'une image de Donald Duck captur\'{e}e sur un site de coloriage. \url{http://www.waouo.com/wp-content/uploads/2011/06/coloriagedonaldduck.jpg} \begin{enumerate} \item Transformer l'image au format \textsf{bmp} avec \textsf{The Gimp} (par exemple). \item Vectoriser l'image avec \textsf{Potrace}, en ligne de commande : \textsf{potrace donald.bmp -o donald2.eps} \item Avec \textsf{pstoedit} convertir au format vectoriel ps simplifi\'{e} avec courbes. On peut op\'{e}rer en ligne de commande : \textsf{pstoedit -f ps donald2.eps donald1.eps} ou bien avec \textsf{GSview} dans le menu Edition, cliquer sur \textsf{Conversion vers un format vectoriel} et choisir \textsf{ps : Simplified Postscript with curves}, on enregistre sous le nom \textsf{donald1.eps}. \item Avec votre \'{e}diteur de texte rechercher \`{a} la fin du fichier la ligne qui donne les dimensions de la bo\^{\i}te : \verb+%%BoundingBox: 4 7 453 640+ . \item La hauteur de l'image eps est $640-7 =633$\,pts, c'est la plus grande dimension. Supposons que votre image finale doive poss\'{e}der une longueur de 4\,cm dans sa plus grande dimension. Sachant que 1\,cm vaut 28.45274\,pts, il faut donc lui appliquer un facteur d'\'{e}chelle \'{e}gal \`{a} $\dfrac{4\times28.45274}{633}$. \item Ensuite il faut d\'{e}placer cette image pour que le centre de celle-ci soit \`{a} l'origine $(0,0)$, il faut donc appliquer la translation $-\dfrac{453+4}{2},\,-\dfrac{640+7}{2}$, ce qui convertit en postscript se traduira par l'ajout de ces deux lignes dans le fichier \textsf{donald1.eps}, au d\'{e}but du fichier juste apr\`{e}s la ligne : \verb+%%Page: 1 1+ \begin{lstlisting} 4 28.45274 mul 633 div dup scale 4 453 add 2 div neg 640 7 add 2 div neg translate \end{lstlisting} On enregistre ce fichier. \item \textsf{pstoedit} intervient \`{a} nouveau, avec les m\^{e}mes options, et on enregistre le fichier final sous le nom : \textsf{donald.eps}. \end{enumerate} \begin{center} \psscalebox{0.9}{ \begin{pspicture}[showgrid](-8,-5)(8,10) \pscircle[doubleline=true]{3} \psset{Yv=100,linestyle=dotted} \psanamorphosis[scale=1 -1](0,0){donald.eps} \multido{\n=-2.00+0.50}{9}{% \pnode(! \n\space -2.00){A} \pnode(! \n\space 2.00){B} \psline(A)(B) \pslineA(A)(B) } \multido{\N=-2.00+0.50}{9}{% \pnode(!-2.0 \N){A} \pnode(!2.0 \N){B} \pslineA(A)(B) \psline(A)(B) } \pstextA[fontsize=25,scale=1.5 -1,fillcolor=black](0,-2.5){Donald} \end{pspicture} } \end{center} \begin{lstlisting} \begin{pspicture}[showgrid](-8,-5)(8,10) \pscircle[doubleline=true]{3} \psset{Yv=100,linestyle=dotted} \psanamorphosis[scale=1 -1](0,0){donald.eps} \multido{\n=-2.00+0.50}{9}{% \pnode(! \n\space -2.00){A} \pnode(! \n\space 2.00){B} \psline(A)(B) \pslineA(A)(B) } \multido{\N=-2.00+0.50}{9}{% \pnode(!-2.0 \N){A} \pnode(!2.0 \N){B} \pslineA(A)(B) \psline(A)(B) } \pstextA[fontsize=25,scale=1.5 -1,fillcolor=black](0,-2.5){Donald} \end{pspicture} \end{lstlisting} \end{document}