\documentclass[12pt,a4paper]{report}

\usepackage{hevea}

\usepackage{estas}

\usepackage{verbatim}

\usepackage{moreverb}

%\usepackage[dvips]{graphicx}

\title{GeoCaml}

\author{A. Doniec}

\begin{document}

%
\maketitle



\begin{center}
GeoCaml est un projet accessible sur le site Savannah

\ahrefurl{http://savannah.gnu.org/projects/geocaml/}  
\end{center}

 
\pagestyle{estas}

\chapter{Manuel GeoCaml}

\section{Installation}
\noindent
GeoCaml est en téléchargement à l'adresse:\\
\texttt{http://freesoftware.fsf.org/download/geocaml/}
\newline
\noindent
Deux distributions sont disponibles:
\begin{itemize}
\item \texttt{geocaml-0.xx.tar.gz} (sources)
\item \texttt{geocaml-0.xx.i386.tar.gz} (binaires pour Linux sur processeurs x86)
\end{itemize}

\subsection{Installation sous Linux à partir des sources}

\noindent
L'installation à partir des sources nécessite OCaml \footnote{disponible sur \texttt{www.ocaml.org}}. Dans une console:
\begin{itemize}
\item[] \texttt{tar xvzf geocaml-0.xx.tar.gz}
\item[] \texttt{cd geocaml-0.xx/source}
\item[] \texttt{touch .depend}
\item[] \texttt{make depend}
\item[] \texttt{make opt}
\item[] \texttt{make install}
\end{itemize}
puis ajouter geocaml-0.xx/bin/ dans votre PATH.

\subsection{Installation sous Linux à partir des binaires}

\noindent
Détarer le fichier \texttt{geocaml-0.xx.i386.tar.gz} et ajouter le chemin au PATH.

\section{Configuration}

GeoCaml offre deux types d'affichage: l'un dans une fenêtre graphique, l'autre par le biai d'un fichier Postcript généré de manière automatique. La visualisation par la fenêtre graphique est utilisable immédiatement. En revanche pour la génération Postcript, quelques manipulations sont préalablement nécessaires.\\ 

Il faut tout d'abord disposer d'un processeur XSLT. Plusieurs sont disponibles gratuitement, citons par exemple:
\begin{itemize}
\item Sablotron sur http://www.gingerall.com/
\item TranforMiix sur http://www.mozilla.org/projects/xslt
\end{itemize}
Il faut ensuite télécharger (et bien sûr installer...) l'extention \texttt{pst-eucl} de Dominique Rodriguez à l'adresse suivante: http://dominique.rodriguez.9online.fr/pst-eucl/.
Pour terminer, il faut éditer le fichier \texttt{postcript.sh} et choisir le processeur XLST (voire en ajouter un autre...) en commantant ou décommantant les lignes adéquates. 
\newpage

\section{Présentation Rapide}

GeoCaml est un programme dédié à la géométrie euclidienne. Il permet par l'utilisation d'un langage simple (proche du langage naturel) de décrire des constructions géométriques. GeoCaml analyse le texte source décrivant la construction et génére un affichage graphique.\\

Un exemple valant mieux qu'un long discours, considérons le problème de 'la droite de Simpson': \textit{Soit ABC un triangle, un point D appartenant à son cercle circonscrit, E, F, et G les projettés orthogonaux de D respectivement sur (BC), (CA), (AB). Que peut-on dire des points E, F, et G?}\\

\noindent
Voici le source décrivant la construction:
\verbatiminput{../exemple/simpson.geo}

\vfill
\newpage
GeoCaml peut afficher le résultat à l'écran:
\begin{figure}[!h]
  \begin{center}
    \includegraphics[width=0.6\columnwidth]{simpson.ps}
  \end{center}
\end{figure}

ou générer un fichier Postcript:

\begin{figure}[!h]
  \begin{center}
    \includegraphics[width=0.6\columnwidth]{simpson_gv.ps}
  \end{center}
\end{figure}

\vfill
\newpage
\section{Description du langage}

Un texte décrivant la figure est une suite de déclarations de points, de droites (ou segments...) et de cercles. Chaque déclaration commence par un \texttt{soit} (ou un \texttt{soient} \footnote{GeoCaml ne tenant pas compte de l'othographe, \texttt{soit} et \texttt{soient} peuvent s'utiliser indifferemment}) et se termine par un '\texttt{.}'. Lorsque l'on souhaite déclarer un objet qui n'apparaitra pas sur la figure (typiquement le cas des traits de constructions), on fait précéder la déclaration du signe '\texttt{/}'.

\subsection{Les points}

GeoCaml utilise comme identifiants pour les points une chaîne de caractères éventuellement suivie d'un nombre.

\subsubsection{Le point quelconque}

Pour créer un (ou plusieurs) point(s) quelconque(s), plusieurs syntaxes sont possibles:\\
\newline
\begin{boxedverbatim}
soit <identifiant> un point.
\end{boxedverbatim}
\\ou
\smallskip
\\
\begin{boxedverbatim}
soit <identifiant> un point quelconque.
\end{boxedverbatim}
\footnote{pour se convaincre que le point est vraiment quelconque...}
\\
\smallskip
\\
\begin{boxedverbatim}
soient <id_1,id_2,...,id_n> <n> points.
\end{boxedverbatim}
\\ou
\smallskip
\\
\begin{boxedverbatim}
soient <id_1,id_2,...,id_n> <n> points quelconques.
\end{boxedverbatim}
\\
\smallskip
\\
\paragraph{Remarque}: pour une question de cohérence dans la déclaration, GeoCaml exige que \texttt{n} référence le nombre exacte d'identifiants précédemment listés. Si ce n'est pas le cas, un message d'erreur est affiché.\\

\noindent
\paragraph{Exemple}:
\begin{verbatim}
soit A un point.
soient B,C,D 3 points quelconques.
\end{verbatim}

\subsubsection{Les points d'intersections}

La première famille de points d'intersections que l'on rencontre en géométrie sont les intersections de droites (ou de segments):\\
\newline
\begin{boxedverbatim}
soit <id_point> intersection de <id_line_1> et <id_line_2>.
\end{boxedverbatim}
\footnote{Nous verrons plus loin comment déclarer des droites et des segments}
\\

La seconde famille est composée des intersections cercle/droite et cercle/cercle. De telles intersections sont en général formées de deux points (sauf cas extrème des tangentes où les deux points sont alors confondus). La déclaration nécessite donc l'introduction de deux identifiants:\\
\newline
\begin{boxedverbatim}
soientt <id_pt_1> et <id_pt_2> intersections de <id1> et <id2>.
\end{boxedverbatim}
\\
\newline
\paragraph{Remarque}:\texttt{id1} et \texttt{id2} peuvent référencer des cercles ou des droites. Si \texttt{id1} et \texttt{id2} référencent tous deux une droite, un message d'erreur est affiché indiquant que ce type d'intersection retourne un point et non deux.

\subsubsection{Le milieu}

GeoCaml permet la construction d'un milieu par la donnée soit de 2 points, soit d'un segment:\\
\newline
\begin{boxedverbatim}
soit <id_milieu> milieu de <id_point_1> et <id_point2>.
\end{boxedverbatim}
\\
\smallskip
\\
\begin{boxedverbatim}
soit <id_milieu> milieu de <id_segment>.
\end{boxedverbatim}
\\
\newline
\paragraph{Remarque}: si \verb+id_segment+ ne référence pas un segment, un message d'erreur est affiché.

\subsubsection{Points sur cercle/points sur droite}

Nous avons vu qu'il était possible de définir un point quelconque dans le plan. Il est également possible de définir un point sur une droite ou sur un cercle:\\ 

\begin{boxedverbatim}
soit <id_point> un point de <id_objet>.
\end{boxedverbatim}
\\
\newline
\paragraph{Remarque}: si \verb+id_objet+ ne référence ni une droite, ni un cercle, un message d'erreur est affciché.

\subsection{Les droites et segments}

Généralement en géométrie, les droites (et segments) sont identifiées par un couple de points entre parenthèses (ou entre crochets pour le segment).\\
ex: \textit{soit le droite (AB) et le segment [BC]}\\
GeoCaml utilise une syntaxe très proche, les identifiants de points étant séparés par une virgule.\footnote{Comme en géométrie, \texttt{(A,B)} et \texttt{(B,A)} référent à la même droite, il est donc possible d'utiliser les deux identifiants indifféremment} Il est également possible d'identifier les droites et les segments par une chaîne de caractère suivie d'un nombre comme pour les points.

\subsubsection{Droites et segments quelconques}

Pour déclarer des droites et des segments quelconques, il est nécessaire d'employer la notation non-parenthésée pour l'identifiant:\\

\noindent
\begin{boxedverbatim}
soit <id_droite> une droite quelconque.
\end{boxedverbatim}
\footnote{Contrairement au point, le mot réservé \texttt{quelconque} n'est pas facultatif}
\\
\newline
\noindent
\paragraph{Exemple}:
\begin{verbatim}
soit D1 une droite quelconques.
\end{verbatim}
 
\subsubsection{Droites et segments passant par deux points}

Connaissant deux points, il possible de tracer la droite ou le segment qui en résulte. Deux syntaxes sont disponibles. La première utilise comme identifiant la chaîne de caractères quelconque:\\

\noindent
\begin{boxedverbatim}
soit <id_droite> la droite passant par <id_pt_1> et <id_pt_2>.
\end{boxedverbatim}
\\
ou
\\
\begin{boxedverbatim}
soit <id_droite> le segment passant par <id_pt_1> et <id_pt_2>.
\end{boxedverbatim}
\\
\newline
\noindent
La seconde utilise la notation parenthésée:\\
\newline
\noindent
\begin{boxedverbatim}
soit la droite (<id_pt_1>,<id_pt_2>).
\end{boxedverbatim}
\\
ou
\\
\begin{boxedverbatim}
soit le segment [<id_pt_1>,<id_pt_2>].
\end{boxedverbatim}
\\
\newline
\noindent
\paragraph{Exemple}:
\begin{verbatim}
soit A,B,C,D 4 points quelconques.
soit D1 une droite passant par A et B.
soit le segment [D,C].
\end{verbatim}

\subsubsection{Orthogonalité}

Les droites perpendiculaires se définissent à partir d'une autre droite (voire d'un segment) et d'un point:\\
\newline
\noindent
\begin{boxedverbatim}
soit <id1> la droite perpendiculaire à <id2> passant par <id_point>.
\end{boxedverbatim}
\\

Pour ce qui est des segments, il faut en plus préciser la longueur. La notation utilisée pour représenter la longueur est celle de la distance algébrique:\\
\newline
\noindent
\begin{boxedverbatim}
soit <id1> le segment perpendiculaire à <id2> 
passant par <id_point> et de longueur |<id_point1>,<id_point2>|.
\end{boxedverbatim}
\\
\newline
\noindent
\paragraph{Exemple}:
\begin{verbatim}
soient A,B 2 points quelconques.
soit le segment [A,B].
soit S le segment perpendiculaire à [A,B] passant par A et de longueur |B,A|.
\end{verbatim}

\subsubsection{Parallélisme}

Les droites parallèles se définissent de la même manière que les droites parallèles:\\
\newline
\noindent
\begin{boxedverbatim}
soit <id1> la droite parallèle à <id2> passant par <id_point>.
\end{boxedverbatim}
\\

Idem pour les segments:\\
\newline
\noindent
\begin{boxedverbatim}
soit <id1> le segment parralèle à <id2> 
passant par <id_point> et de longueur |<id_point1>,<id_point2>|.
\end{boxedverbatim}
\\
\newline
\noindent
\paragraph{Exemple}:
\begin{verbatim}
soient A,B,C 3 points quelconques.
soit le segment [A,B].
soit S le segment parallèle à [A,B] passant par C et de longueur |B,A|.
\end{verbatim}

\subsubsection{Médiatrice}

La construction d'un médiatrice nécessite la connaissance d'un segment:\\
\newline
\noindent
\begin{boxedverbatim}
soit <id1> la médiatrice de <id_segment>.
\end{boxedverbatim}
\\
ou
\\
\begin{boxedverbatim}
soit <id1> la médiatrice de [<id_pt1>,<id_pt2>].
\end{boxedverbatim}
\\
\newline
\noindent
\paragraph{Exemple}:
\begin{verbatim}
soient A,B 2 points quelconques.
soit le segment [A,B].
soit D1 la médiatrice de [A,B].
\end{verbatim}

\subsubsection{Bissectrice}

La construction d'un bissectrice requiert quant à elle trois points\footnote{qui définiront un angle bien entendu...}:\\
\newline
\noindent
\begin{boxedverbatim}
soit <id1> la bissectrice de <id_pointA>,<id_pointB>,<id_pointC>.
\end{boxedverbatim}
\\
\newline
\noindent
\paragraph{Exemple}: Tracer la bissectrice d'un angle $\widehat{ABC}$ quelconque
\begin{verbatim}
soient A,B,C 3 points quelconques.
soit D1 la bissectrice de A,B,C.
\end{verbatim}

\vfill
\newpage
\subsection{Les cercles}

Les identifiants de cercles sont les mêmes que ceux des points: une chaîne de caractères suivies éventuellement d'un nombre.
La construction du cercle réclame le centre et un point de sa circonférence:\\
\newline
\noindent
\begin{boxedverbatim}
soit <id_cercle> le cercle de centre <id_point1> passant par <id_point2>.
\end{boxedverbatim}
\\

\vfill
\newpage

\section{Utilisation du programme}

\noindent
GeoCaml s'utilise en ligne de commandes:
\begin{verbatim}
> geocaml [option] <nom_du_fichier_source>
\end{verbatim}
Cinq options sont pour le moment disponibles:
\begin{verbatim}
  -hwin x définie la hauteur de la fenêtre graphique à x pixels
  -lwin y définie la largeur de la fenêtre graphique à y pixels
  -ps génére un fichier Postcript
  -tex génére un fichier LaTeX
  -xml génère un fichier XML
  -gr utilise l'affichage graphique
  -help  display this list of options
  --help display this list of options
\end{verbatim}

\end{document}
