Figure "escargot".

This commit is contained in:
Georges Dupéron 2010-12-15 01:57:52 +01:00
parent d6bb340b92
commit a32ec00566
3 changed files with 310 additions and 60 deletions

4
.gitignore vendored
View File

@ -3,3 +3,7 @@ rapport.log
rapport.pdf rapport.pdf
rapport.toc rapport.toc
rapport.synctex.gz rapport.synctex.gz
test.aux
test.log
test.pdf
test.toc

View File

@ -1019,7 +1019,7 @@ Une solution, pour tous les nombres naturels, serait de parcourir un graphe comm
\draw[arc] (0,-4) -- (1,-3); \draw[arc] (0,-4) -- (1,-3);
\draw[arc,dashed] (1,-3) -- (2,-2); \draw[arc,dashed] (1,-3) -- (2,-2);
\end{tikzpicture} \end{tikzpicture}
\caption{Graphe G} \caption{Codage d'un couple d'entiers naturels}% TODO : caption
\label{fig:codage-zigzag} \label{fig:codage-zigzag}
\end{figure} \end{figure}
@ -1133,10 +1133,10 @@ Voici une trace de cette fonction en passant \lstinline!*current*! égal à \lst
\begin{enonce} \begin{enonce}
Donner les fonctions de codage et de décodage f1(z)->x et f2(z)->y. Donner les fonctions de codage et de décodage $f_1(z)\rightarrow x$ et $f_2(z)\rightarrow y$.
\end{enonce} \end{enonce}
TODO: Même figure que la précédente, mais avec les 'constations' ajoutées (je ferai un diagramme papier pour qu'on sache ce que je veux ici) TODO: Même figure que la précédente, mais avec les 'constatations' ajoutées (je ferai un diagramme papier pour qu'on sache ce que je veux ici)
En reprenant la figure ??? ci-dessus, on peut faire plusieurs constatations~: En reprenant la figure ??? ci-dessus, on peut faire plusieurs constatations~:
@ -1223,7 +1223,9 @@ long int orderedPairToCodeInt(int x, int y){
\end{lstlisting} \end{lstlisting}
On n'utilise que des valeurs positive pour ce codage. Si x est négative, on l'attribut une valeur impaire. Si \lstinline!x! est positif, on l'attribut une valeur paire, et il en va de même des valeurs de y. Ensuite, on passe le nouveau couple ainsi créé en paramètre en se servant de la fonction initialement créée pour coder les nombres naturels. On n'utilise que des valeurs positive pour ce codage. Si x est négative, on l'attribut une valeur impaire. Si \lstinline!x! est positif, on
l'attribut une valeur paire, et il en va de même des valeurs de y. Ensuite, on passe le nouveau couple ainsi créé en paramètre en se servant
de la fonction initialement créée pour coder les nombres naturels.
Pour trouver un couple à partir d'un code, on fait l'inverse~: Pour trouver un couple à partir d'un code, on fait l'inverse~:
@ -1251,16 +1253,185 @@ int* codeToOrderedPairInt(long int code){
\end{lstlisting} \end{lstlisting}
Un autre système de codage pourrait être utilisé en parcourant un graphe comme suit~: Un autre système de codage pourrait être utilisé en parcourant un graphe comme montré dans la figure \ref{fig:codage-rel}.
TODO: DIAGRAMME DE CODAGE DES ENTIERS METHODE 2 (JE VOUS DONNERAI LE DIAGRAMME EN FORME PAPIER) \begin{figure}[h!]
%% «Paramètres»
\xdef\maxdots{81}
\xdef\maxnums{56}
\xdef\maxcoords{20}
%% ===== Code is below =====
%% Macros crades
\makeatletter
\def\myadv#1#2{%
\xdef\incr@backup{\the\@tempcnta}%
\@tempcnta=#1{}%
\advance\@tempcnta by #2{}%
\xdef#1{\the\@tempcnta}%
\@tempcnta=\incr@backup{}%
}
\def\incr#1{%
\myadv#1{1}%
}
\def\decr#1{%
\myadv#1{-1}%
}
\makeatother
% \centering
\hskip -21mm%% Hack-o-matic to get the picture more or less centered…
\begin{tikzpicture}[
dot/.style={
circle,
inner sep=0.7pt,
fill=black
},
dotphantom/.style={
circle,
inner sep=3pt,
fill=none,
draw=none
},
numero/.style={circle, fill=white, inner sep=0.2pt, text=red, scale=.75},
coord/.style={darkgray, scale=.6},
%
bigarrow/.style={
->,
thick,
draw=green!50!black
}
]
% Diagonales
\node[dotphantom] (pre-phantom-0-0) at (0,0) {};
\node[dotphantom] (pre-phantom-1-0) at (1,0) {};
% Top right
\node[inner sep=0.1pt] (tr-start) at (4,4) {};
\xdef\previous{tr-start}
\foreach \pos/\content in {0/$1\times 2=2$,1/$3\times 4=12$,2/$5\times 6=30$,3/$7\times 8=56$,4/$\vphantom{X}\dots$}{
\node[anchor=south] (tr-temp-\pos) at (intersection cs: first line={(\previous.north west)--(\previous.north east)}, second line={(0,0)--(6,6)}) {\phantom{\content}};
\node[anchor=north west] (tr-\pos) at (intersection cs: first line={(tr-temp-\pos.north west)--(tr-temp-\pos.north east)}, second line={(0,0)--(6,6)}) {\content};
\xdef\previous{tr-\pos}
}
\draw[bigarrow] (pre-phantom-0-0) -- (intersection cs: first line={(\previous.north west)--(\previous.south west)}, second line={(0,0)--(6,6)});
% Top left
\node[inner sep=0.1pt] (tl-start) at (-4,4) {};
\xdef\previous{tl-start}
\foreach \pos/\content in {0/$0^2=0$,1/$2^2=4$,2/$6^2=36$,3/$8^2=64$,4/$\vphantom{X}\dots$}{
\node[anchor=south] (tl-temp-\pos) at (intersection cs: first line={(\previous.north west)--(\previous.north east)}, second line={(0,0)--(-6,6)}) {\phantom{\content}};
\node[anchor=north east] (tl-\pos) at (intersection cs: first line={(tl-temp-\pos.north west)--(tl-temp-\pos.north east)}, second line={(0,0)--(-6,6)}) {\content};
\xdef\previous{tl-\pos}
}
\draw[bigarrow] (pre-phantom-0-0) -- (intersection cs: first line={(\previous.north east)--(\previous.south east)}, second line={(0,0)--(-6,6)});
% Bottom left
\node[inner sep=0.1pt] (bl-start) at (-4,-4) {};
\xdef\previous{bl-start}
\foreach \pos/\content in {0/$0\times 1=0$,1/$2\times 3=6$,2/$4\times 5=20$,3/$6\times 7=42$,4/$\vphantom{X}\dots$}{
\node[anchor=north] (bl-temp-\pos) at (intersection cs: first line={(\previous.south west)--(\previous.south east)}, second line={(0,0)--(-6,-6)}) {\phantom{\content}};
\node[anchor=south east] (bl-\pos) at (intersection cs: first line={(bl-temp-\pos.south west)--(bl-temp-\pos.south east)}, second line={(0,0)--(-6,-6)}) {\content};
\xdef\previous{bl-\pos}
}
\draw[bigarrow] (pre-phantom-0-0) -- (intersection cs: first line={(\previous.north east)--(\previous.south east)}, second line={(0,0)--(-6,-6)});
% Bottom right
\node[inner sep=0.1pt] (br-start) at (5,-4) {};
\xdef\previous{br-start}
\foreach \pos/\content in {0/$1^2=1$,1/$3^2=9$,2/$5^2=25$,3/$7^2=49$,4/$\vphantom{X}\dots$}{
\node[anchor=north] (br-temp-\pos) at (intersection cs: first line={(\previous.south west)--(\previous.south east)}, second line={(1,0)--(6,-5)}) {\phantom{\content}};
\node[anchor=south west] (br-\pos) at (intersection cs: first line={(br-temp-\pos.south west)--(br-temp-\pos.south east)}, second line={(1,0)--(6,-5)}) {\content};
\xdef\previous{br-\pos}
}
\draw[bigarrow] (pre-phantom-1-0) -- (intersection cs: first line={(\previous.north west)--(\previous.south west)}, second line={(1,0)--(6,-5)});
% Fin diagonales
% Définitions pour le code ci-dessous.
\xdef\i{0}
\xdef\x{0}
\xdef\y{0}
\xdef\corner{4}
\xdef\sidelen{0}
\xdef\nextsidelen{1}
\xdef\direction{3}
\incr\maxnums
\incr\maxcoords
\def\reallysmallcheat#1{%
\ensuremath{\hphantom{\vphantom{X}}_{\hphantom{\vphantom{X}}_{#1}}}
}
\def\drawnode{%
\node[dot] (dot-\x-\y) at (\x,\y) {};
\node[dotphantom] (phantom-\x-\y) at (\x,\y) {};
\ifnum\maxnums>\i
\ifnum\corner=0 \node[numero,anchor=north west] at (dot-\x-\y.south east) {\i}; \else
\ifnum\corner=1 \node[numero,anchor=south west] at (dot-\x-\y.north east) {\i}; \else
\ifnum\corner=2 \node[numero,anchor=south east] at (dot-\x-\y.north west) {\i}; \else
\ifnum\corner=3 \node[numero,anchor=north east] at (dot-\x-\y.south west) {\i}; \else
\ifnum\direction=0 \node[numero,anchor=west] at (dot-\x-\y.east) {\i}; \else
\ifnum\direction=1 \node[numero,anchor=south] at (dot-\x-\y.north) {\i}; \else
\ifnum\direction=2 \node[numero,anchor=east] at (dot-\x-\y.west) {\i}; \else
\ifnum\direction=3 \node[numero,anchor=north] at (dot-\x-\y.south) {\i}; \fi\fi\fi\fi\fi\fi\fi\fi
\fi
\ifnum\maxcoords>\i
\ifnum\corner=0 \node[coord,anchor=south east] at (dot-\x-\y.north west) {\reallysmallcheat{(\x, \y)}}; \else
\ifnum\corner=1 \node[coord,anchor=north east] at (dot-\x-\y.south west) {\reallysmallcheat{(\x, \y)}}; \else
\ifnum\corner=2 \node[coord,anchor=north west] at (dot-\x-\y.south east) {\reallysmallcheat{(\x, \y)}}; \else
\ifnum\corner=3 \node[coord,anchor=south west] at (dot-\x-\y.north east) {\reallysmallcheat{(\x, \y)}}; \else
\ifnum\direction=0 \node[coord,anchor=east] at (dot-\x-\y.west) {\reallysmallcheat{(\x, \y)}}; \else
\ifnum\direction=1 \node[coord,anchor=north] at (dot-\x-\y.south) {\reallysmallcheat{(\x, \y)}}; \else
\ifnum\direction=2 \node[coord,anchor=west] at (dot-\x-\y.east) {\reallysmallcheat{(\x, \y)}}; \else
\ifnum\direction=3 \node[coord,anchor=south] at (dot-\x-\y.north) {\reallysmallcheat{(\x, \y)}}; \fi\fi\fi\fi\fi\fi\fi\fi
\fi
}
\def\drawlinknode{%
\drawnode%
\draw[->] (phantom-\oldx-\oldy) -- (phantom-\x-\y);%
}
\def\mystep{%
\incr\i%
\xdef\oldx{\x}%
\xdef\oldy{\y}%
}
\def\changedir#1{%
\xdef\direction{#1}%
\xdef\corner{#1}%
}
\drawnode
\mystep \incr\x
\xdef\cornerc{0}
\foreach \pos in {1,...,\maxdots} {
% Detect when we are at the end of this edge.
\ifnum\sidelen=0
\ifnum\direction=0 \changedir{1} \incr\nextsidelen \else
\ifnum\direction=1 \changedir{2} \else
\ifnum\direction=2 \changedir{3} \incr\nextsidelen \else
\ifnum\direction=3 \changedir{0} \fi\fi\fi\fi% Brin d'acier
\xdef\sidelen{\nextsidelen}
\fi
% Draw node and link to previous, step counters
\drawlinknode \mystep
%% Se déplacer vers ↑←↓→
\ifnum\direction=0 \incr\y \fi
\ifnum\direction=1 \decr\x \fi
\ifnum\direction=2 \decr\y \fi
\ifnum\direction=3 \incr\x \fi
\decr\sidelen
\xdef\corner{4}%% 4 == pas de coin-coin.
}
\end{tikzpicture}
\caption{Codage d'un couple d'entiers relatifs}
\label{fig:codage-rel}
\end{figure}
Bien que les algorithmes d'encodage et de décodage ne soient pas les mêmes, le principe reste identique. Bien que les algorithmes d'encodage et de décodage ne soient pas les mêmes, le principe reste identique.
On peut faire plusieurs constations~: On peut faire plusieurs constations~:
\begin{itemize} \begin{itemize}
\item Le code correspondant aux couples (1,1), (2,2), (3,3), (4,4)\ldots sont respectivement 1, 2, 12, 30\ldots, ce qui correspond à $(1 \times 2)$, $(3 \times 4)$, $(5 \times 6)$, $(7 \times 8)$\ldots \item Le code correspondant aux couples (1,1), (2,2), (3,3), (4,4)\ldots sont respectivement 1, 2, 12, 30\ldots, ce qui correspond à $(1 \times 2)$, $(3 \times 4)$, $(5 \times 6)$, $(7 \times 8)$\ldots
\item Le code correspondant aux couples (0,0), (-1,-1), (-2,-2), (-3,-3)\ldots sont respectivement 0, 6, 20, 42\ldots, ce qui correspond à $(0 \times 1)$, $(2 \times 3)$, $(4 \times 5)$, $(6 \times 7)$\ldots \item Le code correspondant aux couples (0,0), (-1,-1), (-2,-2), (-3,-3)\ldots sont respectivement 0, 6, 20, 42\ldots, ce qui correspond à $(0 \times 1)$, $(2 \times 3)$, $(4 \times 5)$, $(6 \times 7)$\ldots
@ -1399,7 +1570,7 @@ Pour coder un triplet $(x_1, x_2, x_3)$, on code d'abord le couple $(x_1, x_2)$,
\draw (x*2) -- (xmark5); \draw (x*2) -- (xmark5);
\draw[->] (x32) -- (xmark5) -- (x*3); \draw[->] (x32) -- (xmark5) -- (x*3);
\end{tikzpicture} \end{tikzpicture}
\caption{Graphe G} \caption{Codage d'un triplet d'entiers naturels}
\label{fig:codage-couple} \label{fig:codage-couple}
\end{figure} \end{figure}
@ -1601,10 +1772,11 @@ Le codage d'une liste d'entiers relatifs peut donc être résumé par la figure
% \draw (x*2) -- (xmark5); % \draw (x*2) -- (xmark5);
% \draw[->] (x32) -- (xmark5) -- (x*3); % \draw[->] (x32) -- (xmark5) -- (x*3);
\end{tikzpicture} \end{tikzpicture}
\caption{Graphe G} \caption{Codage d'un $n$-uplet d'entiers}
\label{fig:codage-all} \label{fig:codage-all}
\end{figure} \end{figure}
%% TODO : ce qui suit est un doublon du début de l'exercice !?!
Pour coder les triplets, on considère un triplet, (3,1,2) par exemple, comme un couple (3,(1,2)). On calcule le code du couple imbriqué, Pour coder les triplets, on considère un triplet, (3,1,2) par exemple, comme un couple (3,(1,2)). On calcule le code du couple imbriqué,
c'est-à-dire du couple (1,2), ce qui nous donne 8. On refait le même codage en substituant 8 à (1,2), ce qui nous donne (3,8). On code c'est-à-dire du couple (1,2), ce qui nous donne 8. On refait le même codage en substituant 8 à (1,2), ce qui nous donne (3,8). On code
@ -1613,7 +1785,8 @@ coder les \og{}sous-couples\fg{}, ce qui nous permet non seulement de coder les
ce faire, il nous faut deux informations, le code et la taille du k-uplet, qui est implicite lorsque l'on code, mais qui doit être ce faire, il nous faut deux informations, le code et la taille du k-uplet, qui est implicite lorsque l'on code, mais qui doit être
explicitée lorsque l'on doit trouver le k-uplet à partir d'un code. explicitée lorsque l'on doit trouver le k-uplet à partir d'un code.
Voici le code en C pour coder et décoder respectivement n'importe quel k-uplet de nombres entiers en reprenant les fonctions déjà décrites dans la réponse de la question précédente~: Voici le code en C pour coder et décoder respectivement n'importe quel k-uplet de nombres entiers en reprenant les fonctions déjà décrites
dans la réponse de la question précédente~:
\begin{lstlisting}[language=C] \begin{lstlisting}[language=C]
@ -1646,7 +1819,9 @@ int* codeToOrderedMultipleInt(long int code, int size){
\end{lstlisting} \end{lstlisting}
Plusieurs programmes permettant de coder et de décoder des couples et des k-uplets en LISP et en C sont fournis en annexe de ce document, y compris les fonctions 'int* codeToOrderedMultipleIntAlgo2(long int code, int size)' et 'long int orderedMultipleToCodeIntAlgo2(int *arr, int size)' qui se servent du deuxième algorithme pour coder et pour décoder les k-uplets de nombres entiers. Plusieurs programmes permettant de coder et de décoder des couples et des k-uplets en LISP et en C sont fournis en annexe de ce document, y
compris les fonctions 'int* codeToOrderedMultipleIntAlgo2(long int code, int size)' et 'long int orderedMultipleToCodeIntAlgo2(int *arr, int
size)' qui se servent du deuxième algorithme pour coder et pour décoder les k-uplets de nombres entiers.
\begin{enonce} \begin{enonce}

161
test.tex
View File

@ -48,43 +48,107 @@
\setcounter{page}{0} \setcounter{page}{0}
\pagestyle{plain} \pagestyle{plain}
\makeatletter \begin{figure}[h!]
\def\myadv#1#2{% %% «Paramètres»
\xdef\maxdots{81}
\xdef\maxnums{56}
\xdef\maxcoords{20}
%% ===== Code is below =====
%% Macros crades
\makeatletter
\def\myadv#1#2{%
\xdef\incr@backup{\the\@tempcnta}% \xdef\incr@backup{\the\@tempcnta}%
\@tempcnta=#1{}% \@tempcnta=#1{}%
\advance\@tempcnta by #2{}% \advance\@tempcnta by #2{}%
\xdef#1{\the\@tempcnta}% \xdef#1{\the\@tempcnta}%
\@tempcnta=\incr@backup{}% \@tempcnta=\incr@backup{}%
} }
\def\incr#1{% \def\incr#1{%
\myadv#1{1}% \myadv#1{1}%
} }
\def\decr#1{% \def\decr#1{%
\myadv#1{-1}% \myadv#1{-1}%
} }
\makeatother \makeatother
% \centering
\begin{figure}[h!] \hskip -21mm%% Hack-o-matic to get the picture more or less centered…
\xdef\maxdots{81}
\xdef\maxnums{56}
\xdef\maxcoords{20}
\centering
\begin{tikzpicture}[ \begin{tikzpicture}[
dot/.style={ dot/.style={
circle, circle,
inner sep=0.5pt, inner sep=0.7pt,
outer sep=0.5pt,
fill=black fill=black
}, },
numero/.style={red}, dotphantom/.style={
circle,
inner sep=3pt,
fill=none,
draw=none
},
numero/.style={circle, fill=white, inner sep=0.2pt, text=red, scale=.75},
coord/.style={darkgray, scale=.6},
%
bigarrow/.style={
->,
thick,
draw=green!50!black
}
] ]
% Diagonales
\node[dotphantom] (pre-phantom-0-0) at (0,0) {};
\node[dotphantom] (pre-phantom-1-0) at (1,0) {};
% Top right
\node[inner sep=0.1pt] (tr-start) at (4,4) {};
\xdef\previous{tr-start}
\foreach \pos/\content in {0/$1\times 2=2$,1/$3\times 4=12$,2/$5\times 6=30$,3/$7\times 8=56$,4/$\vphantom{X}\dots$}{
\node[anchor=south] (tr-temp-\pos) at (intersection cs: first line={(\previous.north west)--(\previous.north east)}, second line={(0,0)--(6,6)}) {\phantom{\content}};
\node[anchor=north west] (tr-\pos) at (intersection cs: first line={(tr-temp-\pos.north west)--(tr-temp-\pos.north east)}, second line={(0,0)--(6,6)}) {\content};
\xdef\previous{tr-\pos}
}
\draw[bigarrow] (pre-phantom-0-0) -- (intersection cs: first line={(\previous.north west)--(\previous.south west)}, second line={(0,0)--(6,6)});
% Top left
\node[inner sep=0.1pt] (tl-start) at (-4,4) {};
\xdef\previous{tl-start}
\foreach \pos/\content in {0/$0^2=0$,1/$2^2=4$,2/$6^2=36$,3/$8^2=64$,4/$\vphantom{X}\dots$}{
\node[anchor=south] (tl-temp-\pos) at (intersection cs: first line={(\previous.north west)--(\previous.north east)}, second line={(0,0)--(-6,6)}) {\phantom{\content}};
\node[anchor=north east] (tl-\pos) at (intersection cs: first line={(tl-temp-\pos.north west)--(tl-temp-\pos.north east)}, second line={(0,0)--(-6,6)}) {\content};
\xdef\previous{tl-\pos}
}
\draw[bigarrow] (pre-phantom-0-0) -- (intersection cs: first line={(\previous.north east)--(\previous.south east)}, second line={(0,0)--(-6,6)});
% Bottom left
\node[inner sep=0.1pt] (bl-start) at (-4,-4) {};
\xdef\previous{bl-start}
\foreach \pos/\content in {0/$0\times 1=0$,1/$2\times 3=6$,2/$4\times 5=20$,3/$6\times 7=42$,4/$\vphantom{X}\dots$}{
\node[anchor=north] (bl-temp-\pos) at (intersection cs: first line={(\previous.south west)--(\previous.south east)}, second line={(0,0)--(-6,-6)}) {\phantom{\content}};
\node[anchor=south east] (bl-\pos) at (intersection cs: first line={(bl-temp-\pos.south west)--(bl-temp-\pos.south east)}, second line={(0,0)--(-6,-6)}) {\content};
\xdef\previous{bl-\pos}
}
\draw[bigarrow] (pre-phantom-0-0) -- (intersection cs: first line={(\previous.north east)--(\previous.south east)}, second line={(0,0)--(-6,-6)});
% Bottom right
\node[inner sep=0.1pt] (br-start) at (5,-4) {};
\xdef\previous{br-start}
\foreach \pos/\content in {0/$1^2=1$,1/$3^2=9$,2/$5^2=25$,3/$7^2=49$,4/$\vphantom{X}\dots$}{
\node[anchor=north] (br-temp-\pos) at (intersection cs: first line={(\previous.south west)--(\previous.south east)}, second line={(1,0)--(6,-5)}) {\phantom{\content}};
\node[anchor=south west] (br-\pos) at (intersection cs: first line={(br-temp-\pos.south west)--(br-temp-\pos.south east)}, second line={(1,0)--(6,-5)}) {\content};
\xdef\previous{br-\pos}
}
\draw[bigarrow] (pre-phantom-1-0) -- (intersection cs: first line={(\previous.north west)--(\previous.south west)}, second line={(1,0)--(6,-5)});
% Fin diagonales
% Définitions pour le code ci-dessous.
\xdef\i{0} \xdef\i{0}
\xdef\x{0} \xdef\x{0}
\xdef\y{0} \xdef\y{0}
\xdef\corner{0} \xdef\corner{4}
\xdef\sidelen{1} \xdef\sidelen{0}
\xdef\nextsidelen{1} \xdef\nextsidelen{1}
\xdef\direction{0} \xdef\direction{3}
\incr\maxnums \incr\maxnums
\incr\maxcoords \incr\maxcoords
@ -92,39 +156,54 @@
\ensuremath{\hphantom{\vphantom{X}}_{\hphantom{\vphantom{X}}_{#1}}} \ensuremath{\hphantom{\vphantom{X}}_{\hphantom{\vphantom{X}}_{#1}}}
} }
\def\drawnode{% \def\drawnode{%
\node[dot] (\x-\y) at (\x,\y) {}; \node[dot] (dot-\x-\y) at (\x,\y) {};
\node[dotphantom] (phantom-\x-\y) at (\x,\y) {};
\ifnum\maxnums>\i \ifnum\maxnums>\i
\ifnum\corner=0 \node[numero,anchor=north west] at (\x-\y.south east) {\i}; \else \ifnum\corner=0 \node[numero,anchor=north west] at (dot-\x-\y.south east) {\i}; \else
\ifnum\corner=1 \node[numero,anchor=south west] at (\x-\y.north east) {\i}; \else \ifnum\corner=1 \node[numero,anchor=south west] at (dot-\x-\y.north east) {\i}; \else
\ifnum\corner=2 \node[numero,anchor=south east] at (\x-\y.north west) {\i}; \else \ifnum\corner=2 \node[numero,anchor=south east] at (dot-\x-\y.north west) {\i}; \else
\ifnum\corner=3 \node[numero,anchor=north east] at (\x-\y.south west) {\i}; \else \ifnum\corner=3 \node[numero,anchor=north east] at (dot-\x-\y.south west) {\i}; \else
\ifnum\direction=0 \node[numero,anchor=west] at (\x-\y.east) {\i}; \else \ifnum\direction=0 \node[numero,anchor=west] at (dot-\x-\y.east) {\i}; \else
\ifnum\direction=1 \node[numero,anchor=south] at (\x-\y.north) {\i}; \else \ifnum\direction=1 \node[numero,anchor=south] at (dot-\x-\y.north) {\i}; \else
\ifnum\direction=2 \node[numero,anchor=east] at (\x-\y.west) {\i}; \else \ifnum\direction=2 \node[numero,anchor=east] at (dot-\x-\y.west) {\i}; \else
\ifnum\direction=3 \node[numero,anchor=north] at (\x-\y.south) {\i}; \fi\fi\fi\fi\fi\fi\fi\fi \ifnum\direction=3 \node[numero,anchor=north] at (dot-\x-\y.south) {\i}; \fi\fi\fi\fi\fi\fi\fi\fi
\fi
\ifnum\maxcoords>\i
\ifnum\corner=0 \node[coord,anchor=south east] at (dot-\x-\y.north west) {\reallysmallcheat{(\x, \y)}}; \else
\ifnum\corner=1 \node[coord,anchor=north east] at (dot-\x-\y.south west) {\reallysmallcheat{(\x, \y)}}; \else
\ifnum\corner=2 \node[coord,anchor=north west] at (dot-\x-\y.south east) {\reallysmallcheat{(\x, \y)}}; \else
\ifnum\corner=3 \node[coord,anchor=south west] at (dot-\x-\y.north east) {\reallysmallcheat{(\x, \y)}}; \else
\ifnum\direction=0 \node[coord,anchor=east] at (dot-\x-\y.west) {\reallysmallcheat{(\x, \y)}}; \else
\ifnum\direction=1 \node[coord,anchor=north] at (dot-\x-\y.south) {\reallysmallcheat{(\x, \y)}}; \else
\ifnum\direction=2 \node[coord,anchor=west] at (dot-\x-\y.east) {\reallysmallcheat{(\x, \y)}}; \else
\ifnum\direction=3 \node[coord,anchor=south] at (dot-\x-\y.north) {\reallysmallcheat{(\x, \y)}}; \fi\fi\fi\fi\fi\fi\fi\fi
\fi \fi
% {\i\reallysmallcheat{(\x, \y)}};
} }
\def\drawlinknode{% \def\drawlinknode{%
\drawnode% \drawnode%
\draw[->] (\oldx-\oldy) -- (\x-\y);% \draw[->] (phantom-\oldx-\oldy) -- (phantom-\x-\y);%
} }
\def\mystep{% \def\mystep{%
\incr\i% \incr\i%
\xdef\oldx{\x}% \xdef\oldx{\x}%
\xdef\oldy{\y}% \xdef\oldy{\y}%
} }
\def\changedir#1{%
\xdef\direction{#1}%
\xdef\corner{#1}%
}
\drawnode \drawnode
\mystep \incr\x \mystep \incr\x
\xdef\cornerc{0}
\foreach \pos in {1,...,\maxdots} { \foreach \pos in {1,...,\maxdots} {
% Detect when we are at the end of this edge. % Detect when we are at the end of this edge.
\ifnum\sidelen=0 \ifnum\sidelen=0
\ifnum\direction=0 \xdef\direction{1} \xdef\corner{1} \incr\nextsidelen \else \ifnum\direction=0 \changedir{1} \incr\nextsidelen \else
\ifnum\direction=1 \xdef\direction{2} \xdef\corner{2} \else \ifnum\direction=1 \changedir{2} \else
\ifnum\direction=2 \xdef\direction{3} \xdef\corner{3} \incr\nextsidelen \else \ifnum\direction=2 \changedir{3} \incr\nextsidelen \else
\ifnum\direction=3 \xdef\direction{0} \xdef\corner{0} \fi\fi\fi\fi% Brin d'acier \ifnum\direction=3 \changedir{0} \fi\fi\fi\fi% Brin d'acier
\xdef\sidelen{\nextsidelen} \xdef\sidelen{\nextsidelen}
\fi \fi
% Draw node and link to previous, step counters % Draw node and link to previous, step counters
@ -137,17 +216,9 @@
\decr\sidelen \decr\sidelen
\xdef\corner{4}%% 4 == pas de coin-coin. \xdef\corner{4}%% 4 == pas de coin-coin.
} }
% \foreach \sidelen in {2,4, ...,6} {
% \foreach \pos in {2, ..., \sidelen} { \drawlinknode \mystep \incr\y }
% \foreach \pos in {1, ..., \sidelen} { \drawlinknode \mystep \decr\x }
% \foreach \pos in {1, ..., \sidelen} { \drawlinknode \mystep \decr\y }
% \foreach \pos in {0, ..., \sidelen} { \drawlinknode \mystep \incr\x }
% }
% %% Dernier côté :
% \foreach \pos in {2, ..., 8} { \drawlinknode \mystep \incr\y }
\end{tikzpicture} \end{tikzpicture}
\caption{TODO : caption} \caption{Codage d'un couple d'entiers relatifs}
\label{fig:graphe-g} \label{fig:codage-rel}
\end{figure} \end{figure}
\end{document} \end{document}