% This is the documentation of DrGeo
% Le manuel Dr. Geo
% Copyright 2002-2004 OFSET
% Licensed under the terms of the FDL
% French version

\documentclass[a4paper]{book}
\usepackage{hyperlatex}
\T \usepackage[pdftex]{color,graphicx}
\usepackage{makeidx}

\usepackage[latin1]{inputenc}
\usepackage[french]{babel}
\T \usepackage{multicol}

% \W\usepackage{frames}

\usepackage{hyperref}

\captionsfrench
\datefrench
\extrasfrench
\W \htmlpanelfrench

% Prepare macro
\newcommand{\drgeoImagePath}{./figures}
\newcommand{\drgeoApiOutLocale}{Retourne}
\newcommand{\drgeoApiExampleLocale}{Exemple}
% Include common definitions
\input{../drgeniusCommon.tex}



% FIXME experimental, to get nicer book
\W\begin{iftex}
  \usepackage{fancybox}
  \usepackage{fancyhdr}
  \fancyhead{}

  \renewcommand{\headrulewidth}{0.4pt}
  \fancyhead[RO]{\slshape \rightmark}
  \fancyhead[LE]{\slshape \leftmark}
  \fancyfoot[RO]{\colorbox{white}{\ovalbox{\drgeoIcon{fig0}}}}
  \fancyfoot[LE]{\colorbox{white}{\ovalbox{\drgeoIcon{fig0-bis}}}}
  \pagestyle{fancy}
\W\end{iftex}



\makeindex

\htmltitle{Manuel utilisateur de Dr. Geo} 

\htmladdress{\small Des commentaires, des remarques~? \\
  Vous êtes volontaire pour écrire des parties du manuel~?\\
  -> Contactez Hilaire Fernandes at OFSET \drgeoImage{hilaire-email} ou
  rejoignez la liste de diffusion de \drgeo.}


\title{Manuel utilisateur de \drgeo \\
\drgeoImage{fig0}}
\author{Hilaire Fernandes, Andrea Centomo, \\ Jean-Philippe Georget, \\
\textit{OFSET}\\
\texttt{http://www.ofset.org}}


\begin{document}


\W \begin{center}
  
\maketitle

\W \end{center}

\xname{contents}
\tableofcontents

\chapter*{Copyright}
Copyright (c)  2000-2005  OFSET.

      Permission is granted to copy, distribute and/or modify this document
      under the terms of the GNU Free Documentation License, Version 1.2
      or any later version published by the Free Software Foundation;
      with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
      A copy of the license is included in the section entitled "GNU
      Free Documentation License".
      

      Other copyright apply to the respective owners of the modified
      documentations. See the section history for the complet list.


\xname{introduction}
\chapter{Introduction}


\T \fancyput(3.25in,-5in){\setlength{\unitlength}{1in}\fancyoval(7,10.5)}

\section{Avant propos}

\drgeo\ est un logiciel libre de géométrie interactive et de
programmation en Scheme. Il permet de créer des figures géométriques
et de les manipuler interactivement en respectant leurs contraintes
géométriques. Il offre également la possibilité d'introduire
graduellement la programmation.  Il est ainsi utilisable dans des
situations d'enseignement du niveau primaire au niveau supérieur.

L'interface utilisateur de \drgeo\ a été conçue pour allier dans un
ensemble harmonieux à la fois simplicité d'utilisation, ergonomie et
fonctionnalités avancées.

Ainsi l'interface de \drgeo, sous une très grande apparence de
simplicité, permet au néophyte de se familiariser très rapidement avec
les fonctions de base du logiciel. Puis, au fur et à mesure de sa
progression, l'utilisateur découvrira des aspects plus avancés de
l'interface et du fonctionnement de \drgeo\ : multiplicité des
modalités de construction d'objet\footnote{Il s'agit de pouvoir, à
  partir d'une même commande, créer un type d'objet selon des
  modalités différentes.  Par exemple à partir de la commande
  construction de cercle, l'utilisateur peut créer un cercle à partir
  de son centre et un point, ou bien une longueur, ou bien un segment,
  etc. Bien sûr cette commande n'est représentée que par une seule
  icône, il incombe à \drgeo\ d'anticiper sur la construction de
  l'utilisateur. L'effet immédiat est donc une diminution de la charge
  cognitive de l'interface sur l'utilisateur, tout en proposant un
  nombre important de modes de construction.}, macro-construction,
sessions, adaptabilité de l'interface, scriptabilité, Figure Scheme de
\drgeo. Ces fonctionnalités avancées génèrent peu de surcharge sur
l'interface, c'est pour cela que \drgeo\ est très agréablement utilisé
en enseignement primaire, cependant il est également très intéressant
pour le lycée.

Dans les sections suivantes, les outils de base seront exposés.
Ensuite les fonctionnalités avancées seront présentées en détail.

 
\drgeoFigureSize{Écran de bienvenue de \drgenius}{fig1}{8}

L'agencement de l'interface est~:

\begin{enumerate}
\item la \textit{barre de menu} caractéristique avec
\drgeoMenu{Fichier}, \drgeoMenu{Édition},
\drgeoMenu{Macro-constructions}, \drgeoMenu{Fenêtres},
\drgeoMenu{Aide}~;
\item la \textit{barre d'action} pour créer une nouvelle figure, un
texte d'explication, les outils faire/defaire, etc.
\end{enumerate}

Pour créer une nouvelle figure géométrique, l'utilisateur clique sur
le premier bouton de la barre d'action. Alternativement, une nouvelle
figure peut être créée en utilisant le menu
\drgeoMenu{Fichier->Nouveau->Figure}. Lorsqu'une nouvelle figure
est créée, une nouvelle \textit{barre d'icônes} avec un ensemble de
six icônes apparaît. Cette barre d'icônes se termine par un menu
permettant d'ajuster l'échelle de la figure géométrique courante.

En outre, une barre d'icônes verticale de raccourcis, à gauche de la
figure, offre un accès rapide aux outils les plus utilisés.

\drgeoFigureSize{Une figure géométrique vide}{fig2}{8}

Les six icônes de la barre d'icônes sont des entrées de menu pour des
fonctions spécifiques. Ces fonctions sont décrites dans le prochain
chapitre.

\drgeoFigureSize{Une figure \drgeo\ et sa description}{fig50}{8}

Pour chaque figure, un \textit{panneau synoptique} décrivant sa
séquence de construction est disponible. Par défaut ce panneau est
poussé à l'extrême gauche et seule la représentation de la figure est
visible. À tout moment, l'utilisateur peut pousser le panneau vers la
droite pour rendre visible sa description. Une description de figure
est un arbre composé de tous les éléments de la figure. Les éléments
relatifs à d'autres éléments peuvent être développés en cliquant sur
le signe `+', de manière à visualiser les parents de ces éléments.

\section{\drgeo\ sur le web}

\drgeo\ dispose de son propre espace web sur le site d'\textsc{ofset}
à l'adresse~: \xlink{http://www.ofset.org/drgeo}.  

Sur cet espace, l'utilisateur trouvera les informations suivantes~:

\begin{itemize}
  \item les informations pour obtenir \drgeo{}~;
  \item la documentation sur le logiciel~;
  \item des indications pour s'impliquer dans le projet \drgeo{}~;
  \item des références sur des exploitations pédagogiques du logiciel.
\end{itemize}

\chapter{Fonctions de base}

Ce chapitre décrit les outils utilisés pour construire une figure
géométrique. Il se termine par la présentation de la configuration des
préférences par l'utilisateur.

\section{Outils de construction}

Ces outils sont partagés en six groupes accessibles à partir de la
seconde barre d'icônes de \drgeo.

\drgeoFigureSize{Catégories d'outils de \drgeo\ et leur
  description}{fig3}{12}

Lorsque l'utilisateur clique sur une des icônes décorées d'un petit
triangle vert, une nouvelle barre verticale d'icônes s'affiche
immédiatement. Celle-ci regroupe des fonctions d'une même famille.

De la gauche vers la droite, nous avons accès aux barres d'icônes
verticales pour construire des points et des lignes, utiliser des
transformations, calculer des valeurs, gérer des macro-constructions,
et utiliser les outils d'édition -- \emph{Divers outils} dans la
figure.

Ces fonctions se retrouvent à l'identique dans le menu contextuel
d'une figure appelé par un clic droit dans le fond de celle-ci.


\xname{point_tools}
\subsection{Outils de point}

\subsubsection{Point libre}
\drgeoIcon{fig4}
\label{free_point}
\drgeoIndex{Point}{Libre}{}{}

Crée un point libre dans le plan ou sur un objet unidimensionnel
(segment, demi-droite, droite, arc de cercle, cercle, lieu)~:

\begin{enumerate}
\item Dans le premier cas, le point créé peut être déplacé n'importe
où dans le plan de la figure. Pour le construire l'utilisateur clique
simplement sur le fond.

\item Dans le deuxième cas, le point n'est libre que dans l'objet
unidimensionnel (ligne) où il a été crée~; il est collé sur
l'objet. Pour construire ce type de point, l'utilisateur clique sur
une ligne (i.e. droite, demi-droite, segment, cercle, arc de cercle,
etc.).
\end{enumerate}

\paragraph{Comment placer un point avec des coordonnées données~?}

Le plus simple est de placer un point libre puis d'éditer ses
propriétés --~outil \link{Propriétés}[ Section \Ref, page
\Pageref]{property-item}~-- afin d'ajuster ses coordonnées comme
souhaité.

Une autre possibilité --~moins souple pour ce cas de figure~-- est de
placer deux valeurs libres dans la figure --~outils \link{Numériques}[
Section \Ref, page \Pageref]{numeric_tool}~-- puis de construire le
point ayant pour coordonnées ces deux valeurs --~outil \link{Point
défini par ses coordonnées}[ Section \Ref, page
\Pageref]{coordinate_point}. Cette possibilité a un avantage sur la
précédente, le point ainsi construit ne peut pas être déplacé
directement à la souris, le point est en quelque sorte bloqué dans sa
position.


\subsubsection{Milieu}
\drgeoIcon{fig5}

\drgeoIndex{Point}{Milieu}{}{}

Crée le milieu de deux points ou d'un segment~:

\begin{enumerate}
\item Dans le premier cas, l'utilisateur sélectionne deux points.
\item Dans le deuxième cas, l'utilisateur sélectionne simplement un
segment.
\end{enumerate}


\subsubsection{Intersection}
\drgeoIcon{fig6}

\drgeoIndex{Point}{Intersection}{}{}

Crée le ou les points d'intersection de deux lignes (i.e. droite,
demi-droite, segment, arc de cercle, cercle).  L'utilisateur doit
sélectionner deux lignes.

\subsubsection{Point défini par ses coordonnées}
\drgeoIcon{fig7}
\label{coordinate_point}

\drgeoIndex{Point}{Défini par coordonnées}{}{}

Crée un point défini par ses coordonnées. L'utilisateur doit
sélectionner deux nombres, le premier correspond à l'abscisse, le
second à l'ordonnée.

\paragraph{Comment placer un point contraint par ses coordonnées~?}

Cette fonction est largement utilisée lorsque nous souhaitons par
exemple construire le lieu d'un point. Cette construction suppose au
préalable l'existence de deux valeurs --~voir \link{Section numérique}[ Section \Ref, page
\Pageref]{numeric_tool} -- le point est ensuite construit en
sélectionnant ces deux valeurs.




\xname{line_tools}
\subsection{Outils de ligne}

\subsubsection{Droite}
\drgeoIcon{fig8}

\drgeoIndex{Droite}{}{}{}
Crée une droite définie par deux points. L'utilisateur sélectionne
deux points.

\subsubsection{Demi-droite}
\drgeoIcon{fig9}

\drgeoIndex{Demi-droite}{}{}{}

Crée une demi-droite définie par deux points. L'utilisateur
sélectionne deux points, le premier est l'origine, le second
appartient à la demi-droite.

\subsubsection{Segment}
\drgeoIcon{fig10}

\drgeoIndex{Segment}{}{}{}

Crée un segment donné par deux points.

\subsubsection{Vecteur}
\drgeoIcon{fig11}
\drgeoIndex{Vecteur}{}{}{}

Crée un vecteur donné par deux points. L'utilisateur sélectionne deux
points, le premier est l'origine, le second est l'extrémité.

Une fois que le vecteur est créé, celui-ci peut être déplacé
indépendamment des deux points. Ceci reste vrai pour un vecteur
construit par une transformation (Cf. la section Transformations de ce
manuel)

\subsubsection{Cercle}
\drgeoIcon{fig12}

\drgeoIndex{Cercle}{}{}{}

Crée un cercle. L'utilisateur peut créer un cercle à partir de
différentes sélections~:
\begin{enumerate}
 \item le centre et un point du cercle~;
 \item le centre et un nombre (le rayon du cercle)~;
 \item le cercle et un segment dont la longueur est le rayon du cercle.
\end{enumerate}

\subsubsection{Arc de cercle}
\drgeoIcon{fig13}

\drgeoIndex{Arc de cercle}{}{}{}

Crée un arc de cercle défini par trois points. Le premier est
l'origine de l'arc, le troisième est l'extrémité, le second est un
point de l'arc.

\subsubsection{Lieu}
\drgeoIcon{fig14}

\drgeoIndex{Lieu géométrique}{}{}{}

Crée un lieu défini par deux points. L'utilisateur sélectionne deux
points, l'un des deux est un point sur une ligne, l'autre est un
point sous contraintes du premier (i.e. quand l'un bouge, l'autre fait
de même). 

\subsubsection{Polygone}
\drgeoIcon{fig15}

\drgeoIndex{Polygone}{}{}{}

Crée un polygone défini par n points. L'utilisateur sélectionne n+1
points limitant le polygone. Le premier et le dernier sont un seul et
même point ce qui indique à \drgeo\ que la sélection est terminée.
L'objet polygone n'est pas un objet comme les autres lignes, il n'est
pas possible de placer un point dessus ou de construire une
intersection entre un polygone et une autre ligne. En revanche il est
possible de construire l'image d'un polygone par une transformation
géométrique.

\xname{transformation_tools}
\subsection{Outils de transformation}

\subsubsection{Droite parallèle}
\drgeoIcon{fig16}

\drgeoIndex{Droite}{Parallèle}{}{}

Crée une ligne parallèle à une direction et passant par un
point. L'utilisateur sélectionne un point et une direction (i.e. une
droite, une demi-droite, un segment ou un vecteur).

\subsubsection{Droite perpendiculaire}
\drgeoIcon{fig17}

\drgeoIndex{Droite}{Perpendiculaire}{}{}

Crée une droite perpendiculaire à une direction et passant par un
point. L'utilisateur sélectionne un point et une direction
(i.e. une droite, une demi-droite, un segment ou un vecteur).

\subsubsection{Symétrie axiale}
\drgeoIcon{fig18}

\drgeoIndex{Transformation}{Symétrie}{Axiale}{}

Crée l'image d'un objet par une symétrie axiale. L'utilisateur
sélectionne l'objet à transformer et l'axe de symétrie (une
droite). Quand l'utilisateur veut construire l'image d'une droite, la
première droite sélectionnée est la droite à transformer.

\subsubsection{Symétrie centrale}
\drgeoIcon{fig19}

\drgeoIndex{Transformation}{Symétrie}{Centrale}{}

Crée l'image d'un objet par une symétrie centrale. L'utilisateur
sélectionne l'objet à transformer et le centre de symétrie (un
point). Quand l'utilisateur veut construire l'image d'un point, le
premier point sélectionné est le point à transformer.

\subsubsection{Translation}
\drgeoIcon{fig20}

\drgeoIndex{Transformation}{Translation}{}{}

Crée l'image d'un objet par une translation. Quand l'utilisateur veut
construire l'image d'un vecteur, le premier vecteur sélectionné est le
vecteur à translater.

\subsubsection{Rotation}
\drgeoIcon{fig21}

\drgeoIndex{Transformation}{Rotation}{}{}

Crée l'image d'un objet par une rotation. L'utilisateur sélectionne l'objet à transformer, 
le centre et l'angle de la rotation. Quand
l'utilisateur veut créer l'image d'un point, le premier point
sélectionné est le point à transformer.

L'angle peut être sélectionné à partir de différents types de valeurs~:

\begin{itemize}
\item \textbf{valeur numérique}~: l'angle est alors exprimé en
  radians. Exemples de valeurs numériques~: valeur libre, distance
  entre deux points, longueur d'un segment, une coordonnée, une valeur
  retournée par un script Scheme \drgeo, etc.~;
\item \textbf{la mesure d'un angle géométrique formé par trois points}~: 
sa mesure est alors exprimée en degrés. Attention, dans ce cas la
  mesure appartient seulement à l'intervalle [0~;~180]~;
\item \textbf{la mesure d'un angle orienté de deux vecteurs}~: sa
  mesure est exprimée en degrés et couvre l'intervalle ]-180~;~180].
\end{itemize}

\subsubsection{Homothétie}
\drgeoIcon{fig22}

\drgeoIndex{Transformation}{Homothétie}{}{}

Crée l'image d'un objet par une homothétie. L'utilisateur sélectionne
l'objet à transformer, le centre et le facteur (i.e. un
nombre). Quand l'utilisateur veut créer l'image d'un point, le premier
point sélectionné est le point à transformer.

\xname{numeric_tools}
\subsection{Outils numériques}

\subsubsection{Distance, longueur \& nombre}
\drgeoIcon{fig23}
\label{numeric_tool}

\drgeoIndex{Nombre}{}{}{}
\drgeoIndex{Droite}{Pente}{}{}
\drgeoIndex{Droite}{Distance}{}{}
\drgeoIndex{Cercle}{Périmètre}{}{}
\drgeoIndex{Segment}{Longueur}{}{}
\drgeoIndex{Vecteur}{Norme}{}{}
\drgeoIndex{Arc de cercle}{Longueur}{}{}
\drgeoIndex{Nombre}{Valeur libre}{}{}

Crée une valeur numérique. La valeur numérique, selon la sélection de
l'utilisateur, peut être calculée ou bien saisie~:
\begin{enumerate}
 \item deux points~: distance entre ces deux points~;
 \item un segment~: la longueur de ce segment~;
 \item un vecteur~: la norme de ce vecteur~;
 \item un cercle~: le périmètre de ce cercle~;
 \item un arc de cercle~: la longueur de cet arc~;
 \item une droite~: la pente de cette droite~;
 \item une droite et un point~: la distance entre ce point et la
 droite~;
\item un \textbf{clic souris directement sur le fond de la figure}
  permet à l'utilisateur d'entrer une nouvelle valeur (i.e. une valeur
  libre).
\end{enumerate}

Cette dernière possibilité est très intéressante dans certaines
situations. Elle permet de fixer une longueur, le rayon d'un cercle, la
mesure d'angle (en radian) ou les coordonnées d'un point. La valeur
est ensuite utilisée à partir des outils spécifiques de construction
de cercle, de rotation et de point défini par ses coordonnées.

\subsubsection{Angle}
\drgeoIcon{fig24}

\drgeoIndex{Angle}{Géométrique}{}{}{}
\drgeoIndex{Angle}{Orienté}{}{}{}

Calcule la mesure d'un angle défini par trois points ou deux vecteurs.
Dans le premier cas, l'angle est considéré comme non orienté (i.e.
angle géométrique dont la mesure est dans l'intervalle [0~;~180]).
Dans le second cas, l'angle est orienté et sa mesure est dans
l'intervalle ]-180~;~180].

\subsubsection{Coordonnées}
\drgeoIcon{fig25}

\drgeoIndex{Point}{Coordonnées}{}{}
\drgeoIndex{Vecteur}{Coordonnées}{}{}

Crée les coordonnées (abscisse et ordonnée) d'un point ou d'un
vecteur.

\subsubsection{Script Scheme \drgenius}
\label{script-tool}
\drgeoIcon{fig49}

\drgeoIndex{Script}{}{}{}

Crée un script Scheme \drgeo. Le script reçoit \emph{n} objets en
entrée. Il retourne éventuellement un nombre, affiché dans la figure.
Un script peut être utilisé pour ses effets de bord ou pour sa valeur
de retour. Les scripts Scheme \drgeo\ sont couverts en détails dans le
\link{chapitre des fonctionnalités avancées}[ Chapitre
\Ref]{advancedFeatures} et exactement à la \link{section script}[
Section \Ref, page \Pageref]{script}.


\xname{macroconstruction_tools}
\subsection{Outil macro-construction}

\drgeoIndex{Macro-construction}{}{}{}

\subsubsection{Créer une macro-construction}
\drgeoIcon{fig26}

Extrait une séquence de construction d'une figure et la transforme
en macro-construction. 

\subsubsection{Exécuter une macro-construction}
\drgeoIcon{fig27}

Exécute (i.e. ``lance'' ou ``joue'') une macro-construction
pré-construite.  La macro-construction peut être nouvelle ou chargée
depuis un fichier.

\drgeoNote{Les macro-constructions sont présentées dans la \link{Section
macro-construction}[ \Ref, page \Pageref]{macroConstruction}.}

\xname{other_tools}
\section{Autres fonctions}

\subsection{Arbre logique de construction}

\drgeoIndex{Historique}{Arbre logique}{}{}

Chaque figure est associée à un arbre logique de construction. Cet
arbre est chronologique, c'est-à-dire qu'il reprend, du haut vers le
bas, l'ordre de construction de la figure. Certaines entrées de
l'arbre peuvent \^etre dépliées afin de faire apparaître les
antécédents -- c'est à dire les objets parents -- utilisés lors de la
définition de l'objet.

Par défaut l'arbre est masqué, il est en fait replié sur le bord
gauche de la fenêtre, pour le faire apparaître il faut le déplier à
l'aide de la souris. Déplacer le pointeur souris vers le bord gauche
de la fenêtre de \drgeo\, lorsque celui-ci se transforme en ``$<->$'',
presser le bouton souris et tirer vers la droite.

\subsection{Déplacer la figure}

\drgeoIndex{Figure}{Déplacer}{}{}

La figure peut être déplacée en appuyant sur la touche ``Ctrl'' et le
premier bouton de la souris.

\subsection{Déplacer un objet}
\drgeoIcon{fig28}

\drgeoIndex{Objet}{Déplacer}{}{}

Un objet peut être déplacé par glisser-déposer. La figure est alors
redessinée en respectant ses propriétés. Quasiment tous les objets
géométriques peuvent être déplacés. Si nécessaire, \drgeo\ déplace
les points libres associés. Par exemple, quand l'utilisateur déplace
une droite définie par deux points, \drgeo\ déplace les deux points
simultanément.

\subsection{Supprimer un objet}
\drgeoIcon{fig30}

\drgeoIndex{Objet}{Supprimer}{}{}

Un objet d'une figure peut être supprimé en activant ce menu.
Éventuellement, l'utilisateur peut annuler la suppression à l'aide de
la fonction d'annulation à partir de la barre d'icônes ou du menu de
l'application. Par défaut le nombre d'annulations possibles est de 10
mais l'utilisateur peut ajuster cette valeur depuis la boîte de
dialogue des préférences.

\xname{editing_object_styles}
\subsection{Changer l'aspect d'un objet}
\drgeoIcon{fig29}

\drgeoIndex{Editer}{Style}{}{}

\drgeoIndex{Objet}{Renommer}{}{}
\drgeoIndex{Renommer}{Objet}{}{}

\drgeoIndex{Objet}{Masquer}{}{}

Chaque objet géométrique a ses propres attributs de style comme la
couleur, l'épaisseur, l'étiquette, la taille et la forme. De plus, il
est possible de cacher temporairement un objet sans le supprimer. Par
exemple, il peut être utile de cacher des constructions intermédiaires
sans les supprimer. Tous ces attributs sont ajustables depuis la boîte
de dialogue qui s'affiche lorsque l'utilisateur clique sur un objet de
la figure. Pour cela il faut d'abord se mettre dans le mode d'édition
de style en sélectionnant \drgeoMenu{Autres->Aspect} du menu
contextuel de la figure, ou bien en cliquant sur l'icône ci-dessus, du
6ème tiroir d'icônes.


\drgeoIndex{Point}{Renommer}{}{}

La boîte de dialogue du style d'un point concerne tous les types de
point. Il est possible d'ajuster la couleur, la forme, la taille, le
nom et la visibilité.  \drgeoFigure{Boîte de dialogue pour le style
  d'un objet point}{fig31}


La boîte de dialogue du style d'une ligne concerne les droites, les
demi-droites, les segments, les vecteurs, les cercles, les arcs de
cercle, les lieux de points. Il est possible d'ajuster la couleur, le
style, le nom et la visibilité. Lorsqu'une droite, une demi-droite,
un vecteur ou un segment sont définis par deux points ayant des noms
non vides, leur nom est automatiquement déduit à partir de celui des
deux points. Dans ce cas, l'utilisateur ne peut pas les renommer.

\drgeoFigure{Boîte de dialogue pour le style d'un objet ligne}{fig32}

La boîte de dialogue du style d'un nombre ou d'un polygone concerne
toutes les sortes de valeur (saisie par l'utilisateur, calculée par
un script Scheme \drgeo\ ou représentant une mesure géométrique) et
les formes polygonales.

\drgeoFigure{Boîte de dialogue pour les nombres \& les objets polygones}{fig33}

\T \clearpage

\subsection{Changer les propriétés d'un objet}
\label{property-item}
\drgeoIcon{fig52}

\drgeoIndex{Editer}{Propriétés}{}{}
\drgeoIndex{Editer}{Point}{}{}
\drgeoIndex{Editer}{Script}{}{}
\drgeoIndex{Editer}{Valeur}{}{}

Certaines propriétés d'objets sont paramétrables par
l'utilisateur. Quand l'utilisateur clique sur ces objets, une boîte de
dialogue appropriée apparaît. Actuellement, les objets suivants sont
concernés~:

\begin{enumerate}
 \item point libre~: abscisse et ordonnée peuvent être éditées~;\\
 \drgeoFigure{Changement des coordonnées d'un point libre}{fig34}

 \item valeur libre~: sa valeur peut être modifiée~;\\
 \drgeoFigure{Modification d'une valeur libre}{fig36}

 \item script~: son code peut être modifié.\\
 \drgeoFigure{Modification d'un  script}{fig35}

\end{enumerate}

\T \clearpage

\subsection{Afficher une grille}

\drgeoIndex{Figure}{Afficher}{Grille}{}
\drgeoIndex{Grille}{Afficher}{}{}

Il est possible d'afficher une grille unitaire dans toute figure de
\drgeo, la commande est accessible depuis le menu
\drgeoMenu{Édition->Montrer ou cacher la grille}. Elle peut
également être activée par le raccourci clavier \drgeoMenu{Ctrl-G}.
Si la commande est réactivée, la grille est cachée. La grille est
unitaire, chaque subdivision représente une unité. Enfin, lors de la
sauvegarde d'une figure, l'état de la grille est également sauvegardé (affichée ou non affichée).

\section{Préférences utilisateurs}

\xname{default_behaviour}
\subsection{Comportement par défaut}
\label{default_behaviour}

\drgeoIndex{Editer}{Préférences par défaut}{}{}

Le comportement par défaut de \drgeo\ peut être configuré de
plusieurs manières. Pour paramétrer les préférences, l'utilisateur
accède au menu \drgeoMenu{Édition->Préférences...} pour ouvrir la
boîte de dialogue des préférences.

\drgeoFigureSize{Préférences des figures géométriques}{fig38}{8}

La boîte de dialogue est composée en deux parties~:

\begin{enumerate}
\item La première partie concerne les préférences des figures
  géométriques. Des onglets permettent à l'utilisateur de paramétrer
  le réglage par défaut de chaque type d'objet (géométrique ou
  numérique). Les réglages concernent l'aspect des objets.
\item La deuxième partie concerne les préférences globales~:
 \begin{itemize}
 \item Le nombre de niveaux pour Annuler/Refaire~;
 \item Le nom par défaut lorsqu'une nouvelle figure est créée. Le \%d
   est remplacé par un entier géré par \drgeo, cette valeur est
   incrémentée à chaque nouvelle figure~;
 \item Le navigateur Internet -- visionneuse -- par défaut pour
   visualiser l'aide en ligne~;
 \item Les noms par défaut utilisés lors de la sauvegarde d'une figure
   et d'une session~;
 \item Les noms par défaut utilisés lors d'exportations aux formats
   \LaTeX~ et PostScript~;
 \end{itemize}
\end{enumerate}
   
\drgeoIndex{Editer}{Style par défaut}{}{}
\drgeoIndex{Editer}{Préférences par défaut}{Annuler/Refaire}{}
\drgeoIndex{Editer}{Préférences par défaut}{Noms}{}
\drgeoIndex{Aide}{Préférences par défaut}{Visionneuse}{}

\subsection{Autres préférences}

\drgeoIndex{Figure}{Renommer}{}{}

En plus du comportement par défaut de \drgeo, l'utilisateur peut
modifier le nom d'une figure à partir du menu
\drgeoMenu{Édition->Renommer}.

\drgeoFigure{Changement du nom d'une figure}{fig39}

\chapter{Fonctionnalités avancées}
\label{advancedFeatures}

Dans ce chapitre, nous présentons les fonctionnalités qui permettent
d'étendre les possibilités de \drgeo\ ou de l'adapter à une
situation pédagogique donnée.

La première est la \textit{macro-construction}. Elle permet
l'extraction d'une construction logique dans un enregistrement. Cet
enregistrement peut ensuite être répété ou sauvegardé dans un fichier
portant l'extension \textbf{.mgeo} et ouvert lorsque nécessaire.

Les scripts Scheme \drgeo\ --~\drgeo\ Script aka DGS~--
représentent une autre fonctionnalité pour étendre \drgeo. Ces
scripts sont de véritables items de figure, comme les items
géométriques. En entrée, ils reçoivent une ou plusieurs références
d'items géométriques et ils retournent une valeur placée dans la figure.
Ce sont en fait des fonctions\footnote{Ou procédures pour les
amateurs de Pascal.} greffées dans une figure, elles sont évaluées à
chaque mise à jour de la figure (i.e. lorsque la figure a besoin
d'être redessinée).

Les scripts Scheme \drgeo\ sont utiles pour la valeur qu'ils
retournent ou leur effet de bord, cela dépend de ce que l'utilisateur
souhaite réaliser.

En extension des scripts Scheme, \drgeo\ propose d'aller encore plus
loin avec les figures Scheme de \drgeo. Cette fois il s'agit de
décrire une figure géométrique complètement sous la forme d'un code
source écrit dans le langage Scheme. La force de cette approche est de
permettre une construction fonctionnelle\footnote{Par exemple sous
forme récursive} des figures et non plus simplement déclarative comme
c'est le cas avec l'interface graphique.

Enfin, l'adaptation de l'interface utilisateur de \drgeo\ permet à
un enseignant de préparer une session de travail avec des documents
dans lesquels certaines fonctions ont été bloquées par un mot de
passe. L'intérêt est de contrainte à l'utilisation de certains outils
pour des situations pédagogiques données.

\xname{using_macro}
\section{Macro-construction}
\label{macroConstruction}

\drgeoIndex{Macro-construction}{Introduction}{}{}

Une macro-construction ressemble un peu à une procédure qui reçoit des
items d'une figure en entrée et qui retourne un ou plusieurs items de
figure, construits par la macro-construction. Une macro est construite
à partir d'un modèle défini par l'utilisateur. Cela signifie que
l'utilisateur doit réaliser la séquence de construction une première
fois dans une figure puis demander à \drgeo\ de l'enregistrer dans une
macro-construction. La macro-construction peut ensuite être
sauvegardée dans un fichier d'extension \textbf{.mgeo}.

 Pour enregistrer une séquence de construction, \drgeo\ doit
connaître les items initiaux de la séquence ainsi que les items
finaux.  Évidemment, les items finaux ne doivent dépendre \textit{que}
des items initiaux\footnote{Cette contrainte a depuis été assouplie et
permet d'aller encore plus loin avec les macro-constructions. Voir
\link{Créer un polygone régulier}[ Section \Ref, page
\Pageref]{polygon_macro}.}, sinon \drgeo\ ne sera pas capable de
déduire les items finaux à partir des items initiaux.

Ainsi, \drgeo\ déduit la logique de la séquence de construction et
l'enregistre dans une macro-construction. L'utilisateur peut exécuter
cette macro-construction, elle demande seulement les items initiaux
(du bon type) de la figure et construit les items résultants.

\drgeoNote{Les items de figure intermédiaires et invisibles sont
  aussi construits par la macro-construction. Ils sont nécessaires
  pour construire les items résultants.}

Pour illustrer la fonctionnalité macro-construction, nous utiliserons
l'exemple de l'utilisateur qui souhaite enregistrer la construction du
cercle passant par trois points ainsi que son centre.

\drgeoFigureSize{La figure initiale}{fig40}{4}

\drgeoIndex{Macro-construction}{Créer}{}{}

Avant la création de la macro-construction, l'utilisateur doit
construire la figure finale, elle est considérée comme modèle par la
macro-construction.

\drgeoFigureSize{La figure avec la construction finale}{fig41}{4}

\subsection{Création d'une macro-construction}

À cette étape, la séquence de construction est faite. L'utilisateur
doit maintenant avertir \drgeo\ qu'il veut une macro-construction à
partir de cette séquence. Il doit appeler la fonction
\drgeoMenu{Construire une macro} à partir de la barre d'icônes
\drgeoIcon{fig26} ou depuis le menu contextuel de la vue de la
figure.

Depuis la boîte de dialogue de l'assistant, l'utilisateur sélectionne
les paramètres d'entrée et de sortie, le nom et la description de la
macro-construction.

\drgeoFigureSize{Première page de la boîte de dialogue de
  l'assistant pour construire une macro-construction}{fig42}{6}

La seconde page de la boîte de dialogue sert à sélectionner les
paramètres d'entrée. Dans notre exemple, ce sont les trois points
initiaux. L'utilisateur a juste besoin d'aller jusqu'à cette seconde
page et il peut sélectionner les trois points de la figure. Les items
sélectionnés clignotent.

\drgeoFigureSize{La seconde page, les trois points sont
  sélectionnés}{fig43}{6}

À partir de la troisième page, l'utilisateur sélectionne les
paramètres de sortie. Dans notre exemple, nous voulons le cercle et
son centre comme résultat de la macro-construction. Il procède comme
dans le cas des paramètres d'entrée pour les sélectionner.

\drgeoFigureSize{La troisième page, le cercle et son centre sont
  sélectionnés}{fig44}{6}

À partir de la quatrième page, l'utilisateur entre le nom et la
description de la macro-construction. Ces informations sont affichées
lorsque l'utilisateur exécute une macro-construction. Ceci permet de
distinguer les macro-constructions entre elles.

\drgeoFigureSize{La quatrième page, le nom et la description de la
  macro-construction}{fig45}{6}

À partir de la dernière boîte de dialogue de l'assistant (la
cinquième), l'utilisateur termine la création en appuyant sur le
bouton \texttt{Terminer}. Il peut aussi revenir aux étapes précédentes
pour ajuster les paramètres de la macro-construction.

\drgeoNote{Si la sélection des paramètres d'entrée et de sortie ne
  correspond pas (\drgeo\ ne peut pas extraire la logique de la
  construction), la macro-construction ne peut pas être créée. Dans ce
  cas, l'utilisateur doit reconsidérer la sélection des paramètres
  d'entrée et de sortie. Il peut revenir à la seconde ou la troisième
  page de la boîte de dialogue de l'assistant pour ajuster ses choix.}

À cette étape, la macro-construction est créée et enregistrée dans
\drgeo. Dans la prochaine section, nous verrons comment l'utiliser.

\subsection{Exécution d'une macro-construction}
\drgeoIndex{Macro-construction}{Exécuter}{}{}

\subsubsection{À l'aide de la boîte de dialogue}
\drgeoIndex{Macro-construction}{Exécuter}{Boîte de dialogue}{}

Pour exécuter une macro-construction, l'utilisateur peut appeler la
fonction \drgeoMenu{Exécuter une macro préconstruite} à partir
de la barre d'icônes \drgeoIcon{fig27} ou depuis le menu contextuel
de la vue de la figure. Une boîte de dialogue décrivant la procédure
s'affiche alors.

À partir de celle-ci, l'utilisateur sélectionne la
macro-construction. Dans la seconde page, il sélectionne la
macro-construction dans la liste en haut de la boîte de dialogue. Une
fois la macro sélectionnée, il peut directement cliquer sur les
paramètres d'entrée dans la figure. Dès que tous les paramètres
d'entrée sont sélectionnés, la macro-construction est exécutée et les
paramètres finaux sont affichés.

\drgeoFigureSize{L'utilisateur sélectionne les paramètres d'entrée
  dans la figure}{fig46}{6}

Dans notre exemple, la macro-construction nécessite trois paramètres
d'entrée (trois points) et elle construit un point et un cercle. Pour
exécuter notre macro-construction, il faut une figure avec au moins
trois points.

\drgeoFigureSize{Une figure avec trois points}{fig47}{3}

Une fois que notre macro-construction est appliquée à ces trois
points, nous avons le cercle souhaité et son centre.

\drgeoFigureSize{La figure finale avec le cercle et son centre}{fig48}{3}

\subsubsection{À l'aide du menu Macro-constructions}
\drgeoIndex{Macro-construction}{Exécuter}{Menu}{}

Il existe une autre procédure -- plus rapide -- pour exécuter une
macro-construction. La barre de menu principale de \drgeo\ comporte un
menu \drgeoMenu{Macro-constructions}. Ce menu est peuplé par les noms
des macro-constructions chargées en mémoire dans le programme. Pour
exécuter une macro-construction, l'utilisateur sélectionne directement
celle de son choix.

En outre un passage du pointeur souris au dessus de chaque item de
menu fait apparaître une info-bulle de la description de la
macro. L'utilisateur peut ainsi avoir rapidement une
explication sur l'ensemble des macro-constructions.

\drgeoFigureSize{Exécuter une macro-construction directement depuis
le menu \drgeoMenu{Macro-constructions}}{fig62}{6}


\T \clearpage

\xname{drgenius_guile_script}
\section{Script Scheme \drgenius}
\label{script}

\drgeoIndex{Script}{Introduction}{}{}

\drgeo\ est compatible Guile. Cela signifie qu'il est possible
d'exécuter des scripts Scheme avec \drgeo. Mais qu'est-ce que
Guile~? Extrait du manuel de Guile~:

\begin{quote}{\em
Guile est un interpréteur pour le langage de programmation Scheme,
prévu pour être utilisé dans une grande variété d'environnements.
}
\end{quote}

Les citations suivantes décrivent précisément comment Guile est utilisé
dans \drgenius~:

\begin{quote}{\em
    Comme un shell, Guile peut être lancé de manière interactive,
    recevoir des expressions de l'utilisateur, les évaluer et afficher
    les résultats, ou comme un interpréteur de scripts, lire et
    exécuter du code Scheme à partir d'un fichier. Cependant, Guile
    est disponible sous forme de bibliothèque permettant à d'autres
    applications d'incorporer facilement un interpréteur Scheme
    complet.  Une application peut utiliser Guile comme un langage
    d'extension, un langage de configuration propre et puissant, ou
    comme une ``colle'' multi-usages, liant des primitives fournies par
    l'application.  }
\end{quote}

Dans \drgeo, une API est disponible à partir de l'interpréteur
Guile. C'est un ensemble de ``crochets'' dans le moteur géométrique.
C'est pourquoi l'utilisateur peut écrire des scripts pour manipuler
les items (géométriques ou numériques) des figures. Aussi, puisque les
scripts sont des items de figure au même titre que d'autres, ils n'ont
pas besoin d'être dans un fichier séparé, ils sont enregistrés dans le
fichier de la figure. Dans ce qui suit, nous allons utiliser
l'acronyme DGS pour désigner un script Guile \drgeo\ (``\drgeo\
Script'').

\subsection{DGS par l'exemple}

\drgeoIndex{Script}{Exemples}{}{}

L'outil pour créer un DGS est disponible depuis la section numérique
du menu contextuel ou de la barre d'icônes. Un DGS peut recevoir de 0
à \textit{n} paramètres d'entrée.

Après avoir choisi l'outil, il suffit de cliquer sur les objets
souhaités en entrée puis quelque part sur le fond de la figure, le
script sera placé à ce dernier endroit.

Dans la suite nous vous proposons de travailler sur quelques exemples
de DGS, leurs fonctionnalités et leur puissance seront plus facilement
analysées. Les DGS comme les macro-constructions donnent une dimension
particulière à \drgeo, ils permettent --~chacun avec un
positionnement différent\footnote{Les macro-constructions ont une
  approche géométrique tandis que les DGS ont une approche numérique
  mais aussi et surtout nous pouvons les utiliser dans un esprit de bidouillage (``hacking'' en
  anglais).}~-- d'aller là où les auteurs du logiciel ne sont pas allés
ou ne souhaitent pas aller.

Il est aussi important de comprendre que la plupart des
fonctionnalités de l'interpréteur GNU Guile sont disponibles depuis
les DGS. C'est particulièrement vrai pour ses bibliothèques de
fonctions\footnote{En particulier, les fonctions mathématiques}, nous
allons bien sûr les utiliser intensément.


\paragraph{DGS sans paramètre d'entrée}

La procédure pour créer un script sans paramètre d'entrée est la
suivante~:

\begin{enumerate}
\item Après avoir choisi \link{l'outil de script}[ Section \Ref, page
\Pageref]{script-tool}, cliquez \emph{directement} dans le fond d'écran,
à l'emplacement où vous souhaitez placer le script. \textbf{Surtout ne
cliquez sur aucun objet} de la figure, sinon \drgeo\ comprendra que
vous souhaitez cet objet comme paramètre d'entrée du
script\footnote{Si par accident vous cliquiez sur un objet,
sélectionnez de nouveau l'outil de script.  Cela annulera votre
sélection.}.

\item Une fois le script placé, vous voyez la chaîne de caractères
``Dr.~Genius'' s'afficher. Tout script nouvellement créé contient une
commande par défaut pour afficher cette chaîne de caractères, vous
pouvez l'éditer en allant à \link{l'outil propriétés d'objet}[ Section
\Ref, page \Pageref]{property-item}.

\item Une fois cet outil choisi, cliquez sur le script --~ou pour être
plus précis sur sa valeur~-- de votre choix dans la figure. Une boîte
de dialogue contenant le script s'affichera.  Dans la suite de cette
section, c'est dans ce dialogue que nous saisissons les scripts.
\end{enumerate}

\subparagraph{Un générateur de nombres aléatoires et autres~:}

\drgeoIndex{Script}{\texttt{random}}{}{}

Si vous souhaitez un générateur de nombres aléatoires, rien de plus
simple, saisissez pour tout script le code suivant~:
\begin{verbatim}
(random 10)
\end{verbatim}

À chaque mise à jour de la figure, il génère un nombre aléatoire entier dans
l'intervalle [0~;~10[.

Si vous préférez un nombre flottant dans l'intervalle [0~;~1[,
utilisez ce script~:
\begin{verbatim}
(random:uniform)
\end{verbatim}


\drgeoNote{Quelques précisions~:

  \begin{itemize}
  \item La valeur retournée par le script est la valeur calculée par
    la dernière ligne. Ici en l'occurrence, il s'agit de la valeur
    retournée par l'appel d'une fonction~;
  \item La dernière ligne d'un script doit retourner un nombre réel.
    Sinon \drgeo\ affiche ``Résultat non imprimable''~;
  \item Si l'on souhaite retourner la valeur d'une variable, il suffit
    de mettre son nom en dernière ligne.
  \end{itemize}
}

\subparagraph{Calculer des valeurs usuelles~:}

Pour calculer une valeur approchée de $\pi$~:
\begin{verbatim}
(acos -1)
\end{verbatim}

ou de $e$~:
\begin{verbatim}
(exp 1)
\end{verbatim}


Les valeurs retournées par ces DGS sont ensuite utilisables comme
toutes les autres valeurs numériques que peut générer \drgeo.  Pour
toutes ces petites choses les DGS sont donc vos amis. Mais ils peuvent
faire bien plus de choses intéressantes lorsqu'ils reçoivent des
paramètres en entrée.

\paragraph{DGS avec au moins un paramètre d'entrée}

\drgeoIndex{Script}{Paramètres}{}{}
 
La procédure pour créer un DGS avec un paramètre d'entrée est
sensiblement la même. Juste après avoir sélectionné l'outil script,
il suffit de cliquer sur l'objet qui sera passé en paramètre d'entrée,
puis de cliquer sur le fond de l'écran, à l'endroit où le script doit
être placé.

Ensuite, dans le script, la référence du paramètre d'entrée est placée
dans la variable $a1$. Si nous avions défini deux paramètres d'entrée,
leurs références auraient été placées suivant l'ordre de sélection
dans les variables $a1$ et $a2$. De même pour un nombre de 3, 4, etc.
de paramètres d'entrée.

Selon le type d'objet en référence, diverses méthodes sont disponibles
qui pour obtenir sa valeur, qui pour obtenir ses coordonnées, etc. Le
répertoire des méthodes est disponible depuis la Section
\link{Méthodes de référence des DGS}[ \Ref, page \Pageref]{api-dgs}.

Dans la suite, nous exposerons graduellement la construction d'une
portion de courbe représentative d'une fonction et la tangente en un
point mobile à cette portion de courbe.

La figure finale est fournie dans \drgeo. Elle
s'appelle \xlink{slope.fgeo}[(/usr/share/drgeo/examples/figures/slope.fgeo)]{/usr/share/drgeo/examples/figures/slope.fgeo}.

\drgeoFigureSize{La figure que nous obtiendrons}{fig55}{8}


\subparagraph{Définir une valeur dans un intervalle donné~:}

\drgeoIndex{Script}{Intervalle}{}{}

Dans une nouvelle figure, nous commençons par placer deux points et le
segment dont les extrémités sont ces deux points. Sur ce segment nous
plaçons un point libre appelé ``Move me!''. Ce point servira de
jauge, à nous de la calibrer avec un script. Ensuite nous créons un
script ayant pour unique paramètre d'entrée ce point là.

Lorsque $a1$ est une référence vers le point ``Move me!'', le script
suivant nous retourne une valeur décimale comprise entre [-10~;~10]~:

\begin{verbatim}
(define x (getAbscissa a1))
(* 20  (- x 0.5))
\end{verbatim}

Quelques explications s'imposent. Dans la première ligne, l'appel
\texttt{(getAbscissa a1)} permet d'obtenir l'abscisse curviligne de
l'objet référencé par $a1$\footnote{Cette abscisse est dans
  l'intervalle [0~;~1], quel que soit le type de ligne} --~c'est-à-dire
le point ``Move me!''.  Cette abscisse est placée dans une nouvelle
variable $x$.  Ensuite à la deuxième ligne nous calibrons, ici
l'expression est équivalente en notation algébrique à $20 \times ( x -
0.5)$. Comme c'est la dernière ligne du script le résultat de ce
calcul est la valeur retournée et affichée dans la figure.

Enfin, nommons ce script Xo.


\subparagraph{Afficher une portion de courbe représentative d'une
  fonction~:}

\drgeoIndex{Lieu géométrique}{Script}{}{}

La valeur obtenue par le script précédent nous servira d'abscisse,
nous allons nous servir de cette valeur pour calculer avec un deuxième
script l'ordonnée en ce point par la fonction $x \rightarrow
cos(x)$~:

\begin{verbatim}
(define x (getValue a1))
(cos x)
\end{verbatim}

L'appel \texttt{(getValue a1)} permet d'obtenir la valeur numérique de
l'objet de référence $a1$. Ici il s'agit d'obtenir la valeur retournée
par le script précédent. Nous nommons ce script Yo.

Ensuite nous créons le point Mo de coordonnées (Xo~;~Yo). C'est un
point de la courbe représentative de $x \rightarrow cos(x)$. Pour
afficher sa portion de courbe représentative sur l'intervalle
[-10~;~10], nous créons le lieu du point Mo lorsque le point ``Move
Me!'' décrit le segment. Ça y est nous avons une courbe~!

\subparagraph{Calculer et afficher la tangente à une courbe~:}

\drgeoIndex{Script}{Exemples}{Tangente à une courbe}{}

Pour afficher la tangente en Mo, il nous faut d'abord la pente en ce
point. Nous avons donc besoin de la fonction dérivée $x \rightarrow
-sin(x)$ et de Xo. Nous créons un script avec comme paramètre d'entrée
le script Xo~:

\begin{verbatim}
(- 0 (sin (getValue a1)))
\end{verbatim}

La notation préfixée utilisée par Scheme/Guile peut dérouter, c'est
simplement une question d'habitude. Nommons ce script ``pente en Mo''.
Ainsi lorsque Mo se déplace sur la courbe, la pente est recalculée.

Il nous reste maintenant à afficher la tangente. Pour ce faire nous
allons d'abord calculer les coordonnées d'un 
deuxième point --~M1~--
de cette droite. 

Commençons par son abscisse, par exemple $X1 = Xo + 2$, pour ce faire
créons un script avec comme paramètre d'entrée le script Xo~:

\begin{verbatim}
(define x1 (getValue a1))
(+ x1 2)
\end{verbatim}

Nommons ce script X1.

Attaquons-nous maintenant à l'ordonnée de M1. Là nous avons besoin
de~:

\begin{itemize}
\item Mo (référence $a1$)~;
\item la pente en Mo ($a2$)~;
\item l'abscisse X1 ($a3$).
\end{itemize}

Dans le script suivant, nous calculons l'ordonnée de M1 par le calcul
$Yo + m \times (X1 - X0)$~:

\begin{verbatim}
(define x0 (car (getCoordinates a1)))
(define y0 (cadr (getCoordinates a1)))
(define m (getValue a2))
(define x1 (getValue a3))
(+ (* m (- x1 x0)) y0)
\end{verbatim}

Quelques mots sur l'appel \texttt{(getCoordinates a1)}, dans cet appel
$a1$ doit être une référence vers un objet de type point, la méthode
retourne une liste contenant les coordonnées du point --~ici Mo.
\texttt{car} permet d'extraire le premier élément de cette liste,
\texttt{cadr} le deuxième. Le reste du script ne devrait pas poser de problème.

Nommons ce script Y1 puis construisons le point M1 de coordonnées
(X1~;~Y1) et enfin la tangente (MoM1).


Bien sûr, il aurait été possible de n'utiliser que deux ou trois gros
scripts à la place de cette myriade de scripts. Mais nous espérons que
ces petits exemples vous ont donné envie d'essayer par vous-même les
DGS.


\subsection{Méthodes de référence pour les scripts \drgeo}
\label{api-dgs}
% DGS API is exposed here

Les sections suivantes contiennent la description des méthodes
disponibles pour les DGS. Elles sont classées par type d'objet
géométrique ou numérique.

\subsubsection{Point}

\drgeoIndex{Script}{\texttt{getAbscissa}}{}{}{}

\begin{drgeoApi}{valeur (getAbscissa point)}
 \drgeoApiIn{point}{Référence d'un point libre sur une ligne}
 \drgeoApiOut{L'abscisse de ce point sur la ligne. La
   valeur appartient à l'intervalle [0~;~1]}
 \drgeoApiExample{(define x (getAbscissa a1))\\
(* x 10)}
\end{drgeoApi}

\drgeoIndex{Script}{\texttt{setAbscissa}}{}{}{}
\begin{drgeoApi}{(setAbscissa point x)}
  \drgeoApiIn{point}{Référence d'un point libre sur une ligne}
  \drgeoApiIn{x}{Valeur décimale de l'intervalle [0~;~1]
    représentant la nouvelle abscisse}
  \drgeoApiExample{(setAbscissa a1 0.5)}
\end{drgeoApi}


\drgeoIndex{Script}{\texttt{getCoordinates}}{}{}

\begin{drgeoApi}{liste (getCoordinates point|vecteur)}
Retourne les coordonnées d'un point ou d'un vecteur.\\
  \drgeoApiIn{point|vecteur}{Référence vers un point ou un vecteur}
  \drgeoApiOut{Liste contenant les coordonnées du point ou du vecteur}
  \drgeoApiExample{(define c (getCoordinates a1))\\
(define x (car c))\\
(define y (cadr c))\\
(+ (* x x) (* y y))}
\end{drgeoApi}

\drgeoIndex{Script}{\texttt{setCoordinates}}{}{}
\begin{drgeoApi}{(setCoordinates point coord)}
Positionne les coordonnées d'un point\\
  \drgeoApiIn{point}{Référence d'un point libre dans le plan}
  \drgeoApiIn{coord}{Liste de deux nombres décimaux}
  \drgeoApiExample{(define l (list 1.4 (random 5)))\\
(setCoordinate a1 l)}
\end{drgeoApi}


\subsubsection{Droite, Demi-droite, Segment, Vecteur}

\drgeoIndex{Script}{\texttt{getSlope}}{}{}{}
\begin{drgeoApi}{valeur (getSlope direction)}
  \drgeoApiIn{direction}{Référence vers un objet de type droite,
    demi-droite, segment ou vecteur}
  \drgeoApiOut{La pente de cette direction}
  \drgeoApiExample{(define p (getSlope a1))}
\end{drgeoApi}

\drgeoIndex{Script}{\texttt{getUnit}}{}{}{}
\begin{drgeoApi}{valeur (getUnit direction)}
  \drgeoApiIn{direction}{Référence vers un objet de type droite,
    demi-droite, segment ou vecteur}
  \drgeoApiOut{Une liste contenant les coordonnées d'un vecteur unitaire}
  \drgeoApiExample{(define v (getUnit a1))}
\end{drgeoApi}

\begin{drgeoApi}{valeur (getNormal direction)}
  \drgeoApiIn{direction}{Référence vers un objet de type droite,
    demi-droite, segment ou vecteur}
  \drgeoApiOut{Une liste contenant les coordonnées d'un vecteur normal à la direction}
  \drgeoApiExample{(define n (getNormal a1))}
\end{drgeoApi}

\drgeoIndex{Script}{\texttt{getNorm}}{}{}
\begin{drgeoApi}{valeur (getNorm vecteur)}
  \drgeoApiIn{vecteur}{Référence vers un vecteur}
  \drgeoApiOut{La norme de ce vecteur}
  \drgeoApiExample{(define n (getNorm a1))}
\end{drgeoApi}

\drgeoIndex{Script}{\texttt{getLength}}{}{}
\begin{drgeoApi}{valeur (getLength segment)}
  \drgeoApiIn{segment}{Référence vers un segment}
  \drgeoApiOut{La longueur de ce segment}
  \drgeoApiExample{(define l (getLength a1))}
\end{drgeoApi}

\subsubsection{Cercle, Arc de cercle}

\drgeoIndex{Script}{\texttt{getCenter}}{}{}
\begin{drgeoApi}{liste (getCenter cercle|arc-cercle)}
  \drgeoApiIn{cercle|arc-cercle}{Référence vers un cercle ou un arc
    de cercle}
  \drgeoApiOut{Liste contenant les coordonnées du centre du cercle
    ou de l'arc de cercle}
  \drgeoApiExample{(define c (getCenter a1))\\
(car c)}
\end{drgeoApi}

\drgeoIndex{Script}{\texttt{getRadius}}{}{}
\begin{drgeoApi}{valeur (getRadius cercle|arc-cercle)}
  \drgeoApiIn{cercle|arc-cercle}{Référence vers un cercle ou un arc
    de cercle}
  \drgeoApiOut{Rayon du cercle ou de l'arc de cercle}
  \drgeoApiExample{(define r (getRadius a1))}
\end{drgeoApi}

\drgeoIndex{Script}{\texttt{getLength}}{}{}
\begin{drgeoApi}{valeur (getLength cercle|arc-cercle)}
  \drgeoApiIn{cercle|arc-cercle}{Référence vers un cercle ou un arc
    de cercle}
  \drgeoApiOut{Périmètre du cercle ou longueur de l'arc de cercle}
  \drgeoApiExample{(define l (getLength a1))}
\end{drgeoApi}

\subsubsection{Nombre}

\drgeoIndex{Script}{\texttt{getValue}}{}{}
\begin{drgeoApi}{valeur (getValue nombre)}
  \drgeoApiIn{nombre}{Référence vers un nombre}
  \drgeoApiOut{Valeur de ce nombre}
  \drgeoApiExample{(define a (getValue a1))\\
(define b (getValue a2))\\
(+ a b)}
\end{drgeoApi}

\drgeoIndex{Script}{\texttt{setValue}}{}{}
\begin{drgeoApi}{(setValue nombre v)}
  \drgeoApiIn{nombre}{Référence vers un nombre}
  \drgeoApiIn{v}{Valeur décimale}
  \drgeoApiExample{(define v (getValue a1))\\
(setValue a2 v)}
\end{drgeoApi}


\subsubsection{Angle}

\drgeoIndex{Script}{\texttt{getAngle}}{}{}
\begin{drgeoApi}{valeur (getAngle angle)}
  \drgeoApiIn{angle}{Référence vers un angle, orienté ou
    géométrique} 
  \drgeoApiOut{Une mesure de cet angle en degrés.
    Pour obtenir une mesure en radians, utiliser la méthode
    \texttt{getValue}}
  \drgeoApiExample{(define angle1 (getAngle a1))\\
    (define angle2 (getAngle2))\\
    (define angle3 (getAngle a3))\\
    (+ angle1 angle2 angle3)}
\end{drgeoApi}

\subsubsection{Autres}


\drgeoIndex{Script}{\texttt{move}}{}{}
\begin{drgeoApi}{(move item t)}
  \drgeoApiIn{item}{Référence vers un objet de la figure}
  \drgeoApiIn{t}{Vecteur à deux dimensions}
  \drgeoApiExample{(define v (vector .1 0))\\
(move a1 v)}
\end{drgeoApi}


\section{Figure Scheme de \drgeo}

\drgeoIndex{Figure Scheme de \drgeo{}}{Introduction}{}{}  

Les \emph{Figures Scheme de \drgeo} -- (FSD) -- sont des figures
écrites dans un langage relativement naturel. Il ne s'agit donc plus
de construire une figure à l'aide de l'interface graphique de \drgeo\ 
mais plutôt de décrire une figure dans le langage Scheme. Nous avons
apporté le plus grand soin afin que la syntaxe utilsée soit facile et
légère. Aussi l'ensemble des mots clés utilisés pour décrire une
figure simple sont adaptables dans différentes langues. Ainsi une
figure pourra être décrite en Français, en Anglais, en Espagnol, etc.
(Un mélange de langues est même possible mais ce n'est pas
souhaitable).

\subsection{Quelques exemples}

\drgeoIndex{Figure Scheme de \drgeo{}}{Exemples}{}{}  
  
En lui-même Scheme est un langage de très haut niveau, lorsqu'une
figure est définie dans ce langage, nous disposons également de toute
sa puissance pour par exemple définir récursivement telle partie de la
figure, ou bien pour placer aléatoirement certains objets de telle
sorte qu'à chaque ouverture de la figure, celle-ci est légèrement
différente. Bref, les FSD sont libérées du carcan de l'interface
graphique tout en étant renforcées du langage Scheme.
\drgeoIndex{Figure Scheme de \drgeo{}}{Evaluer}{}{} Une FSD est donc
un fichier d'extension \textbf{.scm} créé à l'aide d'un éditeur de
texte, il est ensuite ouvert dans \drgeo\ à l'aide de la commande
\drgeoMenu{Fichier->Évaluer}.



\drgeoIndex{Figure Scheme de \drgeo{}}{Nouvelle figure}{}{}
Commençons par étudier un exemple simple de FSD~:

% Note to the translator, most of the DSF commands can be translated
% in various languages, this is why you can see the command
% written in French, feel free to translate in your language, however
% you will also have to maintain the corresponding
% scm/drgeo_scm_interface_constant_xx.scm file

\begin{verbatim}
(nouvelle-figure "Ma figure")
\end{verbatim}

C'est la plus petite FSD que nous puissions définir. Lors de son
chargement dans \drgeo, celle-ci va simplement créer une nouvelle
figure vide nommée ``Ma figure''. Nous pourrions multiplier les
commandes \texttt{(nouvelle-figure "Ma figure")} autant de fois que
nous le souhaitons, autant de figures seraient créées.

Abordons un deuxième exemple~:

\begin{verbatim}
(nouvelle-figure "Ma figure")
(soit Point "A" libre 1.2 -2)
\end{verbatim}

Cette FSD définit une figure avec un point libre $A$ de coordonnées
initiales $(1,2~;~-2)$. Comme nous pouvons le voir la syntaxe de
définition d'un objet géométrique est relativement agréable, d'autant
plus qu'elle est exprimée dans une langue naturelle. Intéressons-nous
de plus près à la deuxième instruction, en effet celle-ci suit une
syntaxe qui est commune à toutes les commandes de définition d'objet.
Ce type de commande se décompose comme suit~:

\begin{enumerate}
\item Elle commence toujours par le mot-clé \texttt{soit}, il indique
  que nous souhaitons définir un nouvel objet.
\item Il est immédiatement suivi de la catégorie de l'objet, ici
  \texttt{Point}.
\item Le nom de l'objet vient ensuite, $A$, il doit toujours être
  entouré de ". Si nous ne souhaitons pas nommer l'objet, il faut tout
  de même donner un nom vide comme suit: "".
\item Enfin, nous précisons le type de l'objet -- le type de point
  dans notre exemple -- ici \texttt{libre}.  Cela signifie que le
  point $A$ est libre. 
\item Le type de l'objet est suivi d'une liste d'arguments spécifiques.
  Dans notre exemple cette liste est composée de deux nombres, les
  coordonnées du point libre $A$.
\end{enumerate}

Poursuivons avec un troisième exemple~:

\begin{verbatim}
(define (triangle p1 p2 p3)
  (Segment "" extrémités p1 p2)
  (Segment "" extrémités p2 p3)
  (Segment "" extrémités p1 p3))

(define (hasard)
  (- 8 (* 16 (random:uniform))))

(nouvelle-figure "Ma figure")

(soit Point "A" libre (hasard) 0)
(soit Point "B" libre 5 0)
(soit Point "C" libre (hasard) 5)

(triangle A B C)
\end{verbatim}

Cet exemple est particulièrement intéressant, il nous montre trois
choses importantes~:

\begin{enumerate}
\item L'introduction de construction de plus haut niveau, non prévue
  au départ par \drgeo. Ici nous avons défini la fonction
  \texttt{triangle} qui, à partir de trois points, construit le
  triangle passant par ces trois points. Nous pouvons comparer ceci
  avec les macro-constructions mais avec un degré de liberté beaucoup
  plus important.
\item La définition de fonctions associées, ici nous avons défini la
  fonction \texttt{hasard} qui retourne un nombre décimal compris
  entre -8 et 8. Nous utilisons cette fonction pour placer au hasard
  certains points de notre figure, ainsi à chaque ouverture la figure
  est légèrement différente.
\item En fait l'utilisation du mot clé \texttt{soit} n'est pas
  obligatoire, nous l'utilisons lorsque nous souhaitons garder une
  référence de l'objet créé. Par exemple dans la fonction
  \texttt{triangle}, nous ne gardons pas de références des segments
  créés, en revanche lorsque nous définissons nos points $A$, $B$ et
  $C$ nous avons besoin de garder une référence, ces références ont le
  même nom\footnote{D'un point de vue interne au langage Scheme, ces
    références sont des symboles pointant vers une structure interne
    à l'objet -- un prototype -- alors que les noms sont des chaînes
    de caractères.} sans guillemet~: \texttt{A}, \texttt{B} et
  \texttt{C}.  Dans la suite nous appellerons \textbf{symbole} ces
  références, c'est la terminologie exacte du langage Scheme. Ainsi,
  lors de l'appel de la fonction \texttt{triangle}, nous passons en
  paramètre les symboles \texttt{A}, \texttt{B} et \texttt{C} qui sont
  utilisés pour définir nos trois segments.
\end{enumerate}

Noter que lors de la définition des segments, nous ne donnons pas de
nom, dans ce cas \drgeo\ va attribuer un nom par défaut défini à
partir du nom des extrémités. Nos trois segments auront donc comme nom
$[AB]$, $[BC]$ et $[AC]$.

Pour clore cette section, voici un dernier exemple~:

\begin{verbatim}
(soit Point "A" libre 1 0)
(soit Point "B" libre 5 0)
(soit Droite "d1" 2points A B)

(envoi A couleur jaune)
(envoi A forme rond)
(envoi A taille large)
(envoi B masquer)
(envoi d1 épaisseur tiret)
\end{verbatim}

Les trois premières commandes créent deux points et une droite. La
partie qui nous intéresse plus particulièrement est la commande
\texttt{envoi}. Cette commande permet de communiquer avec un objet
dont nous avons gardé un symbole, ici nous avons les symboles
\texttt{A}, \texttt{B} et \texttt{d1}. Elle consiste à envoyer un
message à un objet, son premier argument est l'objet avec lequel nous
communiquons, le deuxième argument le message, le troisième et les
suivants sont déterminés par la nature du message. Par exemple
\texttt{(envoi A couleur jaune)} envoie le message \texttt{couleur}
avec comme paramètre \texttt{jaune}, le point A est peint en jaune. Il
est assez facile de comprendre le sens des autres commandes
\texttt{envoi}.  Elles seront expliquées dans la section suivante.

Nous avons terminé notre petite visite guidée des \emph{Figure Scheme
  Dr. Geo}. Dans les sections suivantes nous exposons l'ensemble des
commandes disponibles pour définir des FSD. 


\subsection{Méthodes de référence pour les Figures Scheme \drgeo}

La définition d'objets dans un document FSD se fait par l'intermédiare
de prototypes. Les prototypes sont en quelque sorte des objets qu'il
est possible d'interroger et de modifier comme nous le verrons par la
suite. 

Cependant, avant toute définition d'objets d'une figure, cette
dernière doit être créée avec la commande \texttt{nouvelle-figure}.

\subsubsection{Commandes générales}

\begin{drgeoApi}{(nouvelle-figure nom)}
  \drgeoApiIn{nom}{Chaîne de caractères} 
  \drgeoApiOut{Ne retourne pas de valeur. L'appel ne produit qu'un
    effet de bord, à savoir la création d'une nouvelle figure, les
    objets suivants sont créés dans cette figure, jusqu'au prochain
    appel de ce type.}
  \drgeoApiExample{(nouvelle-figure "Ma 1er figure")}
\end{drgeoApi}


\subsubsection{Définition d'objets d'une figure}

\drgeoIndex{Figure Scheme de \drgeo{}}{Création d'objets}{}{}

Un objet peut être défini par l'intermédiaire de différentes
syntaxes~:

\begin{itemize}

\item \texttt{(soit Point "p1" type args)}
  
  Le point est créé et sa référence est sauvée dans la variable
  \texttt{p1}. Cette syntaxe utilise une macro Scheme.
  
\item \texttt{(Point "Nom" type args)}

  Le point est créé mais aucune référence du point n'est conservée.

\item \texttt{(define p1 (Point "Nom" type args))}
  
  Le point est créé et sa référence est sauvée dans la variable
  \texttt{p1}.
  
\item \texttt{(set! p1 (Point "Nom" type args))}
  
  Le point est créé et sa référence est copiée dans la variable
  préexistante \texttt{p1}.

\end{itemize}

Si des objets sont créés depuis le corps d'une fonction, utiliser soit
la forme \texttt{set!} ou la forme spéciale Scheme \texttt{let}. Il
est important de remarquer que l'appel de base est celui d'une
fonction retournant une référence de l'objet créé.

Pour en savoir plus sur la correspondance entre les noms de commande
Scheme en français et en anglais, voir le fichier
\texttt{/usr/share/drgeo/scm/drgeo\_scm\_interface\_constant\_fr.scm}.


\drgeoIndex{Figure Scheme de \drgeo{}}{Création d'objets}{Point}{}
\paragraph{Point}
\T ~\\
\begin{drgeoApi}{prototype (Point nom libre x y)}
  \drgeoApiIn{nom}{Chaîne de caractères désignant le nom de l'objet}
  \drgeoApiIn{x}{L'abscisse du point}
  \drgeoApiIn{y}{L'ordonnée du point}
  \drgeoApiOut{Référence d'un point libre du plan
    de coordonnées initiales \texttt{x} et \texttt{y}.}
  \drgeoApiExample{(define p1 (Point "A" libre 1.2 (acos -1)))}
\end{drgeoApi}

\begin{drgeoApi}{prototype (Point nom sur-ligne ligne x)}
  \drgeoApiIn{nom}{Chaîne de caractères désignant le nom de l'objet}
  \drgeoApiIn{ligne}{Référence d'une ligne (droite, demi-droite, segment, etc.)}
  \drgeoApiIn{x}{Abscisse curviligne du point libre, la valeur appartient à l'intervalle [0~;~1]}
  \drgeoApiOut{Référence d'un point libre sur une ligne.}
  \drgeoApiExample{(Point "M" sur-ligne s1 0.5)}
\end{drgeoApi}

\begin{drgeoApi}{prototype (Point nom milieu-2pts p1 p2)}
  \drgeoApiIn{nom}{Chaîne de caractères désignant le nom de l'objet}
  \drgeoApiIn{p1}{Référence d'un point}
  \drgeoApiIn{p2}{Référence d'un point}
  \drgeoApiOut{Référence du milieu des deux points.}
  \drgeoApiExample{(soit Point "A" libre 1 1)\\
(soit Point "B" libre 4 4)\\
(Point "I" milieu-2pts A B)}
\end{drgeoApi}

\begin{drgeoApi}{prototype (Point nom milieu-segment s)}
  \drgeoApiIn{nom}{Chaîne de caractères désignant le nom de l'objet}
  \drgeoApiIn{s}{Référence d'un segment}
  \drgeoApiOut{Référence du milieu du segment.}
  \drgeoApiExample{(Point "L" milieu-segment s)}
\end{drgeoApi}

\begin{drgeoApi}{prototype (Point nom intersection l1 l2)}
  \drgeoApiIn{nom}{Chaîne de caractères désignant le nom de l'objet}
  \drgeoApiIn{l1}{Référence d'une ligne}
  \drgeoApiIn{l2}{Référence d'une ligne}
  \drgeoApiOut{Référence du point d'intersection des deux lignes.}
  \drgeoApiExample{(Point "I" intersection droite segment)}
\end{drgeoApi}

\begin{drgeoApi}{prototype (Point nom intersection2 l1 l2)}
  \drgeoApiIn{nom}{Chaîne de caractères désignant le nom de l'objet}
  \drgeoApiIn{l1}{Référence d'une ligne}
  \drgeoApiIn{l2}{Référence d'une ligne}
  \drgeoApiOut{Référence du 2ème point d'intersection des deux lignes lorsqu'une des deux est du type arc de cercle ou cercle.}
  \drgeoApiExample{(Point "I" intersection2 droite cercle)}
\end{drgeoApi}


\drgeoIndex{Figure Scheme de \drgeo{}}{Création d'objets}{Droite}{}
\paragraph{Droite}
\T ~\\
\begin{drgeoApi}{prototype (Droite nom 2points p1 p2)}
  \drgeoApiIn{nom}{Chaîne de caractères désignant le nom de l'objet}
  \drgeoApiIn{l1}{Référence d'un point}
  \drgeoApiIn{l2}{Référence d'un point}
  \drgeoApiOut{Référence d'une droite passant par deux points.}
  \drgeoApiExample{(soit Point "A" libre 0 0)\\
(soit Point "M" libre 1 2)\\
(Droite "" 2points A M)}
\end{drgeoApi}

\begin{drgeoApi}{prototype (Droite nom parallèle p d)}
  \drgeoApiIn{nom}{Chaîne de caractères désignant le nom de l'objet}
  \drgeoApiIn{p}{Référence d'un point}
  \drgeoApiIn{d}{Référence d'une direction (droite, segment, vecteur, ...)}
    \drgeoApiOut{Référence d'une droite parallèle à la direction
    de \texttt{d} et passant par \texttt{p}.}
  \drgeoApiExample{(soit Point "A" libre  1 5)\\
(soit Droite "d1" parallèle A d)}
\end{drgeoApi}

\begin{drgeoApi}{prototype (Droite nom perpendiculaire p d)}
  \drgeoApiIn{nom}{Chaîne de caractères désignant le nom de l'objet}
  \drgeoApiIn{p}{Référence d'un point}
  \drgeoApiIn{d}{Référence d'une direction (droite, segment, vecteur, ...)}
    \drgeoApiOut{Référence d'une droite perpendiculaire à la direction
    de \texttt{d} et passant par \texttt{p}.}
  \drgeoApiExample{(soit Point "A" libre  1 5)\\
(soit Droite "d1" perpendiculaire A d)}
\end{drgeoApi}

\drgeoIndex{Figure Scheme de \drgeo{}}{Création d'objets}{Demi-droite}{}\paragraph{Demi-droite}
\T ~\\
\begin{drgeoApi}{prototype (Demi-droite nom 2points o p)}
  \drgeoApiIn{nom}{Chaîne de caractères désignant le nom de l'objet}
  \drgeoApiIn{o}{Référence d'un point, origine de la demi-droite}
  \drgeoApiIn{p}{Référence d'un point, point de la demi-droite}
  \drgeoApiOut{Référence d'une demi-droite définie par son origine et un point.}
  \drgeoApiExample{(soit Point "A" libre  1 5)\\
(soit Point "O" libre 0 0)\\
(soit Demi-droite "dd1" 2points A 0)}
\end{drgeoApi}

\drgeoIndex{Figure Scheme de \drgeo{}}{Création d'objets}{Segment}{}
\paragraph{Segment}
\T ~\\

\begin{drgeoApi}{prototype (Segment nom extrémités p1 p2)}
  \drgeoApiIn{nom}{Chaîne de caractères désignant le nom de l'objet}
  \drgeoApiIn{p1}{Référence d'un point}
  \drgeoApiIn{p2}{Référence d'un point}
  \drgeoApiOut{Référence d'un segment défini par ses extrémités.}
  \drgeoApiExample{(soit Point "A" libre  1 5)\\
(soit Point "B" libre 10 4)\\
(soit Segment "" extrémités A B)}
\end{drgeoApi}

\drgeoIndex{Figure Scheme de \drgeo{}}{Création d'objets}{Cercle}{}
\paragraph{Cercle}
\T ~\\
\begin{drgeoApi}{prototype (Cercle nom 2points c p)}
  \drgeoApiIn{nom}{Chaîne de caractères désignant le nom de l'objet}
  \drgeoApiIn{c}{Référence d'un point, centre du cercle}
  \drgeoApiIn{p}{Référence d'un point sur le cercle}
  \drgeoApiOut{Référence d'un cercle défini par son centre et un point.}
  \drgeoApiExample{(soit Point "A" libre  1 5)\\
(soit Point "B" libre 10 4)\\
(soit Cercle "C1" 2points A B)}
\end{drgeoApi}

\begin{drgeoApi}{prototype (Cercle nom centre-rayon c r)}
  \drgeoApiIn{nom}{Chaîne de caractères désignant le nom de l'objet}
  \drgeoApiIn{c}{Référence d'un point, centre du cercle}
  \drgeoApiIn{r}{Référence d'une valeur numérique, rayon du cercle}
  \drgeoApiOut{Référence d'un cercle défini par son centre et son rayon.}
  \drgeoApiExample{(soit Point "A" libre  1 5)\\
(soit Nombre "r" libre 10)\\
(soit Cercle "C1" centre-rayon A r)}
\end{drgeoApi}

\begin{drgeoApi}{prototype (Cercle nom centre-segment c s)}
  \drgeoApiIn{nom}{Chaîne de caractères désignant le nom de l'objet}
  \drgeoApiIn{c}{Référence d'un point, centre du cercle}
  \drgeoApiIn{s}{Référence d'un segment dont la longueur est le rayon du cercle}
  \drgeoApiOut{Référence d'un cercle défini par son centre et son rayon.}
  \drgeoApiExample{(soit Point "A" libre  1 5)\\
(soit Cercle "C1" centre-rayon A s)}
\end{drgeoApi}

\drgeoIndex{Figure Scheme de \drgeo{}}{Création d'objets}{Arc de cercle}{}
\paragraph{Arc de cercle}
\T ~\\
\begin{drgeoApi}{prototype (Arc-cercle nom 3points p1 p2 p3)}
  \drgeoApiIn{nom}{Chaîne de caractères désignant le nom de l'objet}
  \drgeoApiIn{p1}{Référence d'un point, 1$^{ere}$ extrémité de l'arc}
  \drgeoApiIn{p2}{Référence d'un point de l'arc}
  \drgeoApiIn{p3}{Référence d'un point, 2$^{eme}$ extrémité de l'arc}
  \drgeoApiOut{Référence d'un arc de cercle défini par ses extrémités et un point.} 
  \drgeoApiExample{(soit Point "A" libre  1 5)\\
(soit Point "B" libre  0 5)\\
(soit Point "C" libre  -1 -2)\\
(soit Arc-cercle "arc" 3points A B C)}
\end{drgeoApi}


\drgeoIndex{Figure Scheme de \drgeo{}}{Création d'objets}{Polygone}{}
\paragraph{Polygone}
\T ~\\
\begin{drgeoApi}{prototype (Polygone nom npoints args)}
  \drgeoApiIn{nom}{Chaîne de caractères désignant le nom de l'objet}
  \drgeoApiIn{args}{Une liste de références de points~; sommets du polygone}
  \drgeoApiOut{Référence d'un polygone défini pas ses sommets.}
  \drgeoApiExample{(soit Polygone "quad" npoints A B C D)}
\end{drgeoApi}

\drgeoIndex{Figure Scheme de \drgeo{}}{Création d'objets}{Transformations géométriques}{}
\drgeoIndex{Transformation}{Figure Scheme de \drgeo{}}{}{}
\paragraph{Les transformations géométriques}
\T ~\\
Les prototypes des transformations géométriques permettent la
construction des tranformés d'objets. Elles s'appliquent à des
références d'objets de type point, segment, droite, demi-droite,
vecteur, cercle, arc de cercle et polygone.

\begin{drgeoApi}{prototype (TypeObjet nom rotation objet centre angle)}  
  \drgeoApiIn{TypeObjet}{Point, Segment, Droite, Demi-droite,
    Vecteur, Cercle, Arc-cercle, Polygone}   
  \drgeoApiIn{nom}{Chaîne de caractères désignant le nom de l'objet}  
  \drgeoApiIn{objet}{Référence de l'objet à transformer}
  \drgeoApiIn{centre}{Référence d'un point, centre de la rotation}
  \drgeoApiIn{angle}{Référence d'une valeur, angle de la rotation}
  \drgeoApiOut{Référence de l'objet transformé.}
  \drgeoApiExample{(soit Point "I1" rotation I C a)}
\end{drgeoApi}

\begin{drgeoApi}{prototype (TypeObjet nom homothétie objet centre k)}  
  \drgeoApiIn{TypeObjet}{Point, Segment, Droite, Demi-droite,
    Vecteur, Cercle, Arc-cercle, Polygone}   
  \drgeoApiIn{nom}{Chaîne de caractères désignant le nom de l'objet}  
  \drgeoApiIn{objet}{Référence de l'objet à transformer}
  \drgeoApiIn{centre}{Référence d'un point, centre de l'homothétie}
  \drgeoApiIn{k}{Référence d'une valeur, facteur de l'homothétie}
  \drgeoApiOut{Référence de l'objet transformé.}
  \drgeoApiExample{(soit Polygone "P1" homothétie P C k1)}
\end{drgeoApi}

\begin{drgeoApi}{prototype (TypeObjet nom symétrie objet centre)}  
  \drgeoApiIn{TypeObjet}{Point, Segment, Droite, Demi-droite,
    Vecteur, Cercle, Arc-cercle, Polygone}   
  \drgeoApiIn{nom}{Chaîne de caractères désignant le nom de l'objet}  
  \drgeoApiIn{objet}{Référence de l'objet à transformer}
  \drgeoApiIn{centre}{Référence d'un point, centre de la symétrie}
  \drgeoApiOut{Référence de l'objet transformé.}
  \drgeoApiExample{(soit Segment "S1" symétrie S C)}
\end{drgeoApi}

\begin{drgeoApi}{prototype (TypeObjet nom reflexion objet axe)}  
  \drgeoApiIn{TypeObjet}{Point, Segment, Droite, Demi-droite,
    Vecteur, Cercle, Arc-cercle, Polygone}   
  \drgeoApiIn{nom}{Chaîne de caractères désignant le nom de l'objet}  
  \drgeoApiIn{objet}{Référence de l'objet à transformer}
  \drgeoApiIn{axe}{Référence d'une droite, axe de la réflexion}
  \drgeoApiOut{Référence de l'objet transformé.}
  \drgeoApiExample{(soit Polygone "P1" reflexion P d1)}
\end{drgeoApi}

\begin{drgeoApi}{prototype (TypeObjet nom translation objet vecteur)}  
  \drgeoApiIn{TypeObjet}{Point, Segment, Droite, Demi-droite,
    Vecteur, Cercle, Arc-cercle, Polygone}   
  \drgeoApiIn{nom}{Chaîne de caractères désignant le nom de l'objet}  
  \drgeoApiIn{objet}{Référence de l'objet à transformer}
  \drgeoApiIn{vecteur}{Référence d'un vecteur}
  \drgeoApiOut{Référence de l'objet transformé.}
  \drgeoApiExample{(soit Cercle "C1" translation C v)}
\end{drgeoApi}

\drgeoIndex{Figure Scheme de \drgeo{}}{Création d'objets}{Lieu}{}
\paragraph{Lieu géométrique}
\T ~\\
\begin{drgeoApi}{prototype (Lieu nom 2points m c)}
  \drgeoApiIn{nom}{Chaîne de caractères désignant le nom de l'objet}
  \drgeoApiIn{m}{Référence d'un point mobile sur une ligne}
  \drgeoApiIn{c}{Référence d'un point fixe dépendant du point \texttt{m}}
  \drgeoApiOut{Référence d'un lieu.}
  \drgeoApiExample{(Lieu "lieu1" 2points M I)}
\end{drgeoApi}

\drgeoIndex{Figure Scheme de \drgeo{}}{Création d'objets}{Vecteur}{}
\paragraph{Vecteur}
\T ~\\
\begin{drgeoApi}{prototype (Vecteur nom 2points o e)}
  \drgeoApiIn{nom}{Chaîne de caractères désignant le nom de l'objet}
  \drgeoApiIn{o}{Référence d'un point, origine du vecteur}
  \drgeoApiIn{e}{Référence d'un point, extrémité du vecteur}
  \drgeoApiOut{Référence d'un vecteur.}
  \drgeoApiExample{(soit Point "B" libre  0 5)\\
(soit Point "C" libre  -1 -2)\\
(Vecteur "" 2points C B)}
\end{drgeoApi}

\drgeoIndex{Figure Scheme de \drgeo{}}{Création d'objets}{Nombre}{}
\paragraph{Nombre}
\T ~\\
\begin{drgeoApi}{prototype (Nombre nom libre x y v)}
  \drgeoApiIn{nom}{Chaîne de caractères désignant le nom de l'objet}
  \drgeoApiIn{x,y}{Les coordonnées de l'emplacement du nombre}
  \drgeoApiIn{v}{La valeur initiale du nombre}
  \drgeoApiOut{Référence d'un nombre libre.}
  \drgeoApiExample{(soit Nombre "pi" libre  5 5 (acos -1))}
\end{drgeoApi}

\begin{drgeoApi}{prototype (Nombre nom longueur-segment x y s)}
  \drgeoApiIn{nom}{Chaîne de caractères désignant le nom de l'objet}
  \drgeoApiIn{x,y}{Les coordonnées de l'emplacement du nombre}
  \drgeoApiIn{s}{Référence d'un segment}
  \drgeoApiOut{Référence d'un nombre, longueur d'un segment.}
  \drgeoApiExample{(soit Nombre "l" longueur-segment  5 5 S)}
\end{drgeoApi}

\begin{drgeoApi}{prototype (Nombre nom norme-vecteur x y v)}
  \drgeoApiIn{nom}{Chaîne de caractères désignant le nom de l'objet}
  \drgeoApiIn{x,y}{Les coordonnées de l'emplacement du nombre}
  \drgeoApiIn{s}{Référence d'un vecteur}
  \drgeoApiOut{Référence d'un nombre, norme d'un vecteur.}
  \drgeoApiExample{(soit Nombre "l" norme-vecteur  5 5 V)}
\end{drgeoApi}

\begin{drgeoApi}{prototype (Nombre nom point-cercle x y p c)}
  \drgeoApiIn{nom}{Chaîne de caractères désignant le nom de l'objet}
  \drgeoApiIn{x,y}{Les coordonnées de l'emplacement du nombre}
  \drgeoApiIn{p}{Référence d'un point}
  \drgeoApiIn{c}{Référence d'un cercle}
  \drgeoApiOut{Référence d'un nombre, distance entre le point et le cercle.}
  \drgeoApiExample{(soit Nombre "l" point-cercle  5 5 P C)}
\end{drgeoApi}

\begin{drgeoApi}{prototype (Nombre nom point-droite x y p d)}
  \drgeoApiIn{nom}{Chaîne de caractères désignant le nom de l'objet}
  \drgeoApiIn{x,y}{Les coordonnées de l'emplacement du nombre}
  \drgeoApiIn{p}{Référence d'un point}
  \drgeoApiIn{c}{Référence d'une droite}
  \drgeoApiOut{Référence d'un nombre, distance entre le point et la droite.}
  \drgeoApiExample{(soit Nombre "d" point-droite  5 5 M D1)}
\end{drgeoApi}

\begin{drgeoApi}{prototype (Nombre nom point-point x y p1 p2)}
  \drgeoApiIn{nom}{Chaîne de caractères désignant le nom de l'objet}
  \drgeoApiIn{x,y}{Les coordonnées de l'emplacement du nombre}
  \drgeoApiIn{p1}{Référence d'un point}
  \drgeoApiIn{p2}{Référence d'un point}
  \drgeoApiOut{Référence d'un nombre, distance entre les deux points.}
  \drgeoApiExample{(soit Nombre "d" point-point  5 5 A B)}
\end{drgeoApi}

\begin{drgeoApi}{prototype (Nombre nom longueur-cercle x y c)}
  \drgeoApiIn{nom}{Chaîne de caractères désignant le nom de l'objet}
  \drgeoApiIn{x,y}{Les coordonnées du nombre}
  \drgeoApiIn{c}{Référence d'un cercle}
  \drgeoApiOut{Référence d'un nombre, longueur d'un cercle.}
  \drgeoApiExample{(soit Nombre "p" longueur-cercle  5 5 C)}
\end{drgeoApi}

\begin{drgeoApi}{prototype (Nombre nom pente-droite x y d)}
  \drgeoApiIn{nom}{Chaîne de caractères désignant le nom de l'objet}
  \drgeoApiIn{x,y}{Les coordonnées du nombre}
  \drgeoApiIn{d}{Référence d'une droite}
  \drgeoApiOut{Référence d'un nombre, pente d'une droite.}
  \drgeoApiExample{(soit Nombre "p" pente-droite  5 5 d1)}
\end{drgeoApi}

\begin{drgeoApi}{prototype (Nombre nom longueur-arc x y arc)}
  \drgeoApiIn{nom}{Chaîne de caractères désignant le nom de l'objet}
  \drgeoApiIn{x,y}{Les coordonnées du nombre}
  \drgeoApiIn{arc}{Référence d'un arc de cercle}
  \drgeoApiOut{Référence d'un nombre, longueur d'un arc de cercle.}
  \drgeoApiExample{(soit Nombre "l" longueur-arc  5 5 ABC)}
\end{drgeoApi}

\drgeoIndex{Figure Scheme de \drgeo{}}{Création d'objets}{Angle}{}
\paragraph{Angle}
\T ~\\
\begin{drgeoApi}{prototype (Angle nom géométrique A B C)}
  \drgeoApiIn{nom}{Chaîne de caractères désignant le nom de l'objet}
  \drgeoApiIn{A}{Référence d'un point}
  \drgeoApiIn{B}{Référence d'un point, sommet de l'angle}
  \drgeoApiIn{C}{Référence d'un point}
  \drgeoApiOut{Référence d'un angle géométrique.}
  \drgeoApiExample{(soit Angle "a" géométrique  A B C)}
\end{drgeoApi}

\begin{drgeoApi}{prototype (Angle nom orienté x y v1 v2)}
  \drgeoApiIn{nom}{Chaîne de caractères désignant le nom de l'objet}
  \drgeoApiIn{x,y}{Les coordonnées de l'emplacement de l'angle}
  \drgeoApiIn{v1}{Référence d'un vecteur}
  \drgeoApiIn{v2}{Référence d'un vecteur}
  \drgeoApiOut{Référence d'un angle orienté formé par les deux vecteurs.}
  \drgeoApiExample{(define v1 (Vecteur "" 2points A B))\\
(define v2 (Vecteur "" 2points A C))\\
(Angle "a" orienté 1 1 v1 v2)}
\end{drgeoApi}

\subsubsection{Modification d'attributs d'objets}

\drgeoIndex{Figure Scheme de \drgeo{}}{Création d'objets}{Attributs des objets}{}

Pour modifier les attributs d'un objet déjà créé, nous utilisons un
système de messages envoyés directement au prototype représentant
l'objet en question. La modification des attributs se fait donc
toujours à posteriori.

\begin{drgeoApi}{(envoi objet couleur valeur)}
  \drgeoApiIn{objet}{Référence d'un objet} 
  \drgeoApiIn{valeur}{La couleur, les valeurs possibles sont
    \texttt{noir, gris-noir, gris, blanc, vert-noir, vert, bleu-noir,
      bleu, rouge, bordeaux, jaune, orange}}
  \drgeoApiExample{(soit Point "A" libre  1 2)\\
(envoi A couleur vert)}
\end{drgeoApi}

\begin{drgeoApi}{(envoi ligne épaisseur valeur)}
  \drgeoApiIn{ligne}{Référence d'une ligne (droite,
    demi-droite, cercle, lieu, etc.)}  
  \drgeoApiIn{valeur}{L'épaisseur, les valeurs possibles sont
    \texttt{tiret, normal, large}}
  \drgeoApiExample{(soit Point "A" libre  1 2)\\
    (soit Point "O" libre 0 0)\\
    (soit Droite "d" 2points A B)\\
    (envoi d épaisseur tiret)}
\end{drgeoApi}

\begin{drgeoApi}{(envoi point taille valeur)}
  \drgeoApiIn{point}{Référence d'un point}    
  \drgeoApiIn{valeur}{La taille du point, les valeurs possibles sont
    \texttt{petit, normal, large}}
  \drgeoApiExample{(soit Point "A" libre  1 2)\\
    (envoi A taille petit)}
\end{drgeoApi}

\begin{drgeoApi}{(envoi point forme valeur)}
  \drgeoApiIn{point}{Référence d'un point}    
  \drgeoApiIn{valeur}{La forme du point, les valeurs possibles sont
    \texttt{rond, croix, rond-vide, rec, rec-vide}}
  \drgeoApiExample{(soit Point "A" libre  1 2)\\
    (envoi A forme rond)}
\end{drgeoApi}

\begin{drgeoApi}{(envoi objet masquer)}
  \drgeoApiIn{objet}{Référence d'un objet à masquer}    
  \drgeoApiExample{(soit Point "A" libre  1 2)\\
    (envoi A masquer)}
\end{drgeoApi}

 
% IT WOULD BE BETTER TO INCLUDE THE SYNONIMS IN THE DEFINITION

% OF EACH COMMAND IN ADDITION TO PUTTING THEM  IN A SEPARATE SECTION

% IT WOULD BE NICE TO HAVE IT IN TWO COLUMNS.

\subsection{Synonymes des commandes Figure Scheme \drgeo{}}
\drgeoIndex{Figure Scheme de \drgeo{}}{Synonymes}{}{}

Cette section consiste en une transcription légèrement modifiée du
fichier
(\texttt{/usr/share/drgeo/scm/drgeo\_scm\_interface\_constant\_fr.scm}).

Ce fichier défini les synonymes des commandes utilisées pour écrire
une Figure Scheme en français. Ces synonymes sont toujours définis à
partir de la version de référence des commandes qui est en anglais.

Cette section peut donc vous aider à comprendre une Figure Scheme
écrite en anglais.

En fait il est possible de combiner des commandes en anglais avec
leurs synonymes en français, espagnol, etc. Cependant, si vous
souhaitez que votre figure soit exploitable par n'importe quel groupe
linguistique, nous vous suggérons d'utiliser l'anglais.

Par exemple, les portions de codes suivantes sont synonymes~:

\begin{verbatim}
(lets  Point "P" free 3 3)(send A 'color bordeaux)
(soit Point ¨P¨ libre 3 3)(envoi A couleur bordeaux)
\end{verbatim}

Certains termes anglais n'ont pas de synonymes en français. C'est tout
simplement parce que leur version française est identique.

\T \begin{multicols}{2}[][0.1cm]
\begin{verbatim}
COULEURS :
noir black
gris-noir dark-grey
gris grey
blanc white
vert-noir dark-green
vert green
bleu-noir dark-blue
bleu blue
rouge red
jaune yellow

ÉPAISSEURS :
tiret dashed
petit small

FORMES DE POINT :
rond round
croix cross
rond-vide round-empty
rec-vide rec-empty

STYLES :
couleur 'color
épaisseur 'thickness
forme 'shape
taille 'size
masquer 'masked

POINTS :
libre 'free
sur-ligne 'on-curve
milieu-2pts 'middle-2pts
milieu-segment 'middle-segment

SEGMENTS :
extrémités 'extremities

DROITES :
parallèle 'parallel
orthogonale 'orthogonal
perpendiculaire 'orthogonal

CERCLES :
centre-rayon 'center-radius
centre-segment 'center-segment

NUMÉRIQUES :
longueur-segment 'segment-length
norme-vecteur 'vector-norm
point-droite 'point-line
point-cercle 'point-circle
longueur-cercle 'circle-length
pente-droite 'line-slope
longueur-arc 'arc-length

ANGLES :
géométrique 'geometric
orienté 'oriented

TRANSFORMATIONS :
homothétie 'scale
symétrie 'symmetry

GÉNÉRAL :
soit lets
nouvelle-figure new-figure
envoi send
Droite Line
Demi-droite Ray
Cercle Circle
Arc-cercle Arc
Lieu Locus
Vecteur Vector
Nombre Numeric
Polygone Polygon

\end{verbatim}
\T \end{multicols}





\subsection{Galerie d'exemples}
\drgeoIndex{Figure Scheme de \drgeo{}}{Exemples}{}{}

Pour illustrer l'utilisation des Figures Scheme \drgeo, nous vous
proposons une petite série d'exemples. Ceux-ci vous montrent leurs
importantes possibilités et nous espérons qu'ils seront également une
source d'inspiration. Pour chacun de ces exemples, nous donnons le
code source Scheme de la figure puis son résultat. Le code source peut
être copié dans un éditeur de texte puis sauvegardé dans un fichier
d'extension \textbf{.scm} pour l'évaluer avec \drgeo.

\subsubsection{Polygone régulier}
\drgeoIndex{Figure Scheme de \drgeo{}}{Exemples}{Polygone régulier}{}

Construire un polygone régulier, avec un nombre de cotés arbitraire,
peut se faire par l'intermédiaire d'une fonction récursive Scheme.

\begin{verbatim}
(define pi (acos -1))
(define n 15)
(define x0 0)
(define y0 0)
(define p1 0)

(define (polygon center p a n)
  (if (> n 0)
      (begin
        (set! p1 (Point "" rotation p center a))
        (send p1 masked)
        (Segment "" extremities p p1)
        (polygon center p1 a (- n 1)))))

(new-figure "Regular Polygon!")
(lets Point "C" free x0 y0)
(lets Numeric "a" free 0 0 (* 2 (/ pi n)))
(send a masked)

(set! p1 (Point "I" free 5 0))

(lets Segment "S" extremities C p1)
(Segment ""  rotation S C a)

(polygon C p1 a n)
\end{verbatim}

\drgeoFigureSize{Un polygone régulier à 15 côtés}{fig59}{6}


\subsubsection{Fractal}
\drgeoIndex{Figure Scheme de \drgeo{}}{Exemples}{Fractal}{}

La construction d'une courbe fractale de la forme d'un arbre se fait
très aisément avec une figure Scheme. Le code source de la figure est
étonnement compact, surtout comparé à une construction ``à la main''
depuis l'interface graphique.

\begin{verbatim}
(new-figure "Baum")
(lets Numeric "A1" free 2 2 +3.4)
(lets Numeric "A2" free 2 3 -3.7)
(lets Numeric "S1" free 2 4 +0.5)
(lets Numeric "S2" free 2 5 +0.9)

(define (dec n)
  (- n 1))
(define (inc n)
  (+ n 1))
(define (invisible p)
  (send p masked)
  p)
(define (scalerot oP C a s)
  (let* ((sP (invisible (Point "" scale oP C s)))
         (rP (invisible (Point "" rotation sP C a))) )
    rP))
(define (Zweig p0 p1 n)
  (Segment "" extremities p0 p1)
  (let* ((left-scale (if (odd? n) S1 S2))
         (left-angle A1)
         (right-scale (if (odd? n) S2 S1))
         (right-angle A2) )
    (if (> n 0)
      (begin
        (Zweig p1 (scalerot p0 p1  left-angle  left-scale) (dec n))
        (Zweig p1 (scalerot p0 p1 right-angle right-scale) (dec n))))))
        
(lets Point "A" free -3 0)
(lets Point "B" free -3 2)
(Zweig A B 6)
\end{verbatim}

\drgeoFigureSize{Une courbe fractale simulant la représentation d'un
  arbre}{fig60}{8}


\section{Animation}

\drgeoIndex{Animer}{Point}{}{}
\drgeoIndex{Point}{Libre}{Animer}{}

\drgeo\ propose un outil simple pour animer des points libres sur une
courbe. Pour cela la figure sur laquelle se déroulera l'animation doit
comporter au minimum un point libre sur une ligne.  

Depuis le menu \drgeoMenu{Animations}, choisir une des quatre
vitesses d'animation, puis, dans la figure sélectionner un point libre sur
courbe\footnote{En fait, \drgeo\ ne permet que ce type de sélection}.
Le point choisi s'anime alors automatiquement le long de sa ligne et
l'ensemble de la figure est actualisé en fonction.

\drgeoNote{En cours d'animation il est possible de changer la vitesse
  depuis le menu \drgeoMenu{Animation}, la vitesse du point animé
  change automatiquement. Il est aussi possible d'utiliser les
  raccourcis claviers \texttt{[Ctrl]+1}, \texttt{[Ctrl]+2},...}

Pour stopper l'animation, cliquer n'importe où dans la figure. Le
point reprend alors sa position initiale sur la ligne.
\section{Masquer des outils dans l'interface}
\label{ui-lock}

\drgeo\ offre la possibilité de préparer des
sessions\footnote{Fichiers comprenant plusieurs documents \drgeo\ 
  (i.e. figure, macro, texte)} dans lesquelles l'enseignant peut décider,
pour certaines figures, de bloquer l'accès à certains outils. Le
verrouillage se fait à la figure près avec un mot de passe différent à
chaque fois. Cela donne toute la latitude à l'enseignant de préparer
une activité avec différentes figures et autant de degrés de
verrouillage.


\subsection{Verrouiller des outils}

\drgeoIndex{Outils}{Verrouiller}{}{}

Le verrouillage se fait à la figure près, aussi depuis l'une d'entre
elles, aller au menu \drgeoMenu{Édition->Adapter l'Interface}. Une
grande boîte de dialogue s'affiche, dans celle-ci l'utilisateur
reconnaît les icônes utilisées dans la barre d'icônes de \drgeo. Il
peut en cliquant sur ces icônes, les désactiver ou activer. Lorsque un
outil est désactivé, son icône représentative apparaît légèrement
grisée. Il est également possible de désactiver toute une rangée
d'outils en cliquant sur l'icône de haut niveau (i.e.  celle avec un
petit triangle vert).

\drgeoFigureSize{La boîte dialogue pour verrouiller des
  outils.}{fig53}{8}

Lorsque l'utilisateur a fini sa sélection d'outils à verrouiller, il
procède au verrouillage à proprement parler en cliquant sur le bouton
\drgeoMenu{Verrouiller} dans la boîte de dialogue, \drgeo\
demande alors un mot de passe.

\drgeoNote{Lors de la sauvegarde d'une figure ou d'une session avec
  des verrouillages de l'interface, les mots de passe sont également
  sauvegardés dans le fichier sous une forme cryptée.}

\subsection{Déverrouiller des outils}

\drgeoIndex{Outils}{Déverrouiller}{}{}

Il est bien sûr possible de déverrouiller une interface, que cela soit
pour donner progressivement accès à des outils --~lors d'un travail
d'élèves sur une session~-- ou pour retravailler une figure. Pour
cela, il faut aller dans le menu \drgeoMenu{Édition->Adapter
  l'Interface} et choisir dans la boîte de dialogue le bouton
\drgeoMenu{Déverrouiller}. \drgeo\ demande alors le mot de passe
entré précédemment.

\drgeoFigure{La boîte de dialogue pour déverrouiller l'interface
  d'une figure.}{fig54}


\chapter{Fichiers et documents}

Les constructions peuvent être enregistrées de deux manières. Une
construction par fichier ou un ensemble de constructions par fichier
(i.e. une session \drgeo).  Nous vous rappelons que les documents
contenant des figures doivent être sauvegardés avec une extension
\textbf{.fgeo} et ceux contenant uniquement des macro-constructions
avec l'extension \textbf{.mgeo}.  Pour les documents contenant des
figures, macro-constructions et des textes d'explications, utiliser
l'extension \textbf{.fgeo}.

Ceci n'est qu'indicatif mais suivre ces règles permet de s'y retrouver
plus facilement parmi les fichiers.

\section{Enregistrement d'une construction}

\drgeoIndex{Figure}{Enregistrer}{}{}

À partir du menu \drgeoMenu{Fichier->Enregistrer} ou
\drgeoMenu{Fichier->Enregistrer sous...}, un fichier contenant la
figure de la vue active peut être enregistré.  \drgeoNote{\drgeo\
  peut travailler avec plusieurs figures en même temps. L'utilisateur
  peut passer d'une figure à l'autre en cliquant sur l'onglet
  correspondant.}

Avec le second menu, l'utilisateur peut changer le nom du document enregistré.

\drgeoNote{Le nom de fichier par défaut proposé peut être changé à
  partir du menu \drgeoMenu{Édition->Préférences...}.  Pour plus
  d'information, voir la \link{section comportement par défaut}[ Section \Ref,
  page \Pageref]{default_behaviour}.}

\section{Enregistrement d'une session}

\drgeoIndex{Macro-construction}{Enregistrer}{}{}
\drgeoIndex{Session}{Enregistrer}{}{}

Une session est un ensemble de données de \drgeo\ que l'utilisateur
veut enregistrer d'un seul coup dans un fichier. Cela permet à
l'enseignant d'organiser un ensemble de données (figures,
macro-constructions, notes) dans un seul fichier, de façon à faciliter
leur exploitation.

À partir du menu \drgeoMenu{Fichier->Enregistrement multiple},
l'utilisateur peut ouvrir la boîte de dialogue de session.

\drgeoFigureSize{La boîte dialogue de session \drgenius}{fig51}{8}

Dans cette boîte de dialogue, la liste de toutes les données actives
est présentée dans un tableau. La première colonne liste les types des
données contenues dans \drgeo, la seconde les noms des données.

\drgeoNote{Actuellement, une session peut contenir trois types de
  données~: figure interactive 2D, macro-construction et texte.}

L'utilisateur peut décider de sélectionner une par une les données à
enregistrer dans la liste puis appuyer sur le bouton
\drgeoMenu{Enregistrer la sélection}. Autrement, il peut
enregistrer toutes les données en appuyant sur le bouton
\drgeoMenu{Enregistrer tout}.

\drgeoNote{Le menu \drgeoMenu{Fichier->Enregistrement multiple}
  est le seul moyen d'enregistrer une macro-construction dans un
  fichier.}


\section{Enregistrer une macro-construction}
\drgeoIndex{Macro-construction}{Enregistrer}{}{}

Pour enregistrer une ou des macro-constructions dans un fichier, il
faut procéder comme pour enregistrer une session -- enregistrement
multiple. Depuis la boîte de dialogue de sauvegarde d'une session,
sélectionner la ou les macro-constructions à sauvegarder, puis sauver
dans un fichier d'extension \textbf{.mgeo}. C'est tout~!

Il est ainsi possible de vous composer des librairies de
macro-contructions, une par fichier ou plusieurs regroupées selon un
même thème dans un seul fichier.

\section{Ouvrir un fichier}

\drgeoIndex{Macro-construction}{Ouvrir}{}{}
\drgeoIndex{Session}{Ouvrir}{}{}
\drgeoIndex{Figure}{Ouvrir}{}{}

Que l'utilisateur ait sauvegardé une seule figure ou une session avec
différents types de documents, la procédure pour l'ouverture est la
même par le menu \drgeoMenu{Fichier->Ouvrir}. Si la session ouverte
contient des macro-constructions, celles-ci sont directement
disponibles depuis l'outil permettant l'exécution des
macro-constructions. Les macro-constructions sont disponibles depuis
toutes les figures ouvertes.

\section{Exporter une figure}

\drgeo\ offre la possibilité d'exporter une figure géométrique vers un
document \LaTeX\ ou PostScript. Ces deux formats d'exportation sont de
type vectoriel contrairement à des images en plan de bits qui sont de
qualité moindre pour une impression.  Les commandes d'exportation sont
accessibles depuis le sous-menu \drgeoMenu{Figure->Exporter
  sous...}

\subsection{Exportation \LaTeX}
\drgeoIndex{Figure}{Exporter}{\LaTeX}{}

Dans le cas d'une exportation vers \LaTeX, le document exporté nécessite
le paquet \texttt{pstricks}. Celui-ci est en général distribué avec
\LaTeX. Typiquement un document exporté en \LaTeX\ pourra être intégré
dans un autre document \LaTeX\ ou même directement compilé~:

\begin{verbatim}
latex figure.tex
dvips figure.dvi 
\end{verbatim}

Cette suite de commandes permet d'obtenir le document figure.ps qui
peut être ouvert avec le logiciel GhostView\footnote{GhostView est un
  logiciel qui permet de visualiser des documents PostScript (.ps ou
  .eps) ainsi que des documents PDF} \texttt{gv}.

\subsection{Exportation PostScript}
\label{exporter-ps}
\drgeoIndex{Figure}{Exporter}{PostScript}{}

L'exportation au format PostScript -- extension \texttt{eps} pour
\emph{Encapsulated PostScript}-- offre l'avantage d'être plus
facilement utilisable depuis divers logiciels\footnote{Ce format est
reconnu par TeXmacs, OpenOffice.org, Lyx, \LaTeX\, Xfig, The Gimp et
bien d'autres encore}. En fait le format \textsc{eps} est plus ou
moins un standard de fait en ce qui concerne les images
vectorielles. Pour visualiser rapidement ce type d'image, nous
utilisons le logiciel GhostView, sa commande est \texttt{gv}.

\subsection{Exportation image \textsc{png}}
\drgeoIndex{Figure}{Exporter}{Image PNG}{}

Certains logiciels comme OpenOffice.org n'exploitent que partiellement
le format \textsc{eps}\footnote{OpenOffice.org permet d'intégrer une
image \textsc{eps} mais pas de l'afficher. C'est uniquement à
l'impression que celle-ci apparaît.}. Aussi une exportation au format
image \textsc{png} est également possible. L'image exportée sous ce
format est en haute définition avec le fond de la figure encodé en
zone transparente. Depuis un traitement de texte, cela peut permettre
de faire un détourage de texte autour de la figure.

\subsection{Exportation Fly Draw}
\drgeoIndex{Figure}{Exporter}{Fly Draw/WIMS}{}

Le serveur d'exercices WIMS développé par Dr. Xiao Gang à l'université
de Nice dispose d'un format de description des figures appelé Fly
Draw. \drgeo\ propose également une exportation vers ce format.

\subsection{Définir la zone exporter}
\drgeoIndex{Figure}{Exporter}{Définir la zone d'exportation}{}

Par défaut, \drgeo\ exporte la zone visible de la figure. Ainsi si
nous souhaitons exporter une zone précise de la figure, nous pouvons
redimensionner la fenêtre de \drgeo\ jusqu'à obtenir la zone
voulue\footnote{Éventuellement, le panneau latéral de l'arbre logique
  de la figure peut être déplié pour réduire davantage la zone
  d'exportation.}.

Cependant cette solution, si elle rapide et simple, n'est pas toujours
suffisamment souple, de plus la zone d'exportation n'est pas
enregistrée avec la figure. Une autre façon est donc d'utiliser la
commande \drgeoMenu{Définir la zone d'exportation} accessible depuis
le menu \drgeoMenu{Fichier->Préférences d'exportation}. 

La commande activée, nous pouvons définir dans la figure un rectangle
correspondant à la zone exportée. Cette zone peut être redéfinie
autant de fois que nécessaire. Elle est représentée par un rectangle
gris clair. Lorsque la figure est sauvegardée cette zone l'est
également. Enfin elle peut être supprimée par la commande
\drgeoMenu{Supprimer la zone d'exportation}.

\drgeoFigureSize{Une figure avec une zone d'exportation définie}{fig56}{7}

\drgeoFigureSize{La zone d'exportation a été exportée dans un document
  PostScript, il est visualisé avec GhostView}{fig57}{7}


\chapter{Applications didactiques}

Ce chapitre est une aide pour l'utilisateur souhaitant étudier
 \drgeo{} à partir d'exemples.  Contrairement aux chapitres
 précédents, l'approche est plus concrète par rapport à des situations
 précises. Le contenu de ce chapitre s'est constitué lors de diverses
 activités pédagogiques.


\section{Pythagore et scripts}

Une des possibilités d'utilisation didactique de \drgeo{} consiste dans
l'utilisation des \link{scripts Scheme}[ Section \Ref, page
\Pageref]{script} pour résoudre des exercices de géométrie.

Comme exemple, nous allons montrer la solution d'un problème classique
mettant en oeuvre le théorème de Pythagore dont le texte est le
suivant~:

\begin{quote}
\em Soit un trapèze rectangle $ABCD$ où sont connues les bases et la
hauteur.
Calculer le périmètre et l'aire du trapèze.
\end{quote}

Il n'est pas difficile, si vous suivez le même modèle, de développer
d'autres exemples similaires.

\textbf{Solution~:}

Commençons par construire la figure dans \drgeo{} qui doit être comme
ci-dessous~:

\drgeoFigureSize{Trapèze rectangle}{dafig1}{8}

La figure comprend les données à partir desquelles nous pouvons
résoudre le problème. D'abord nous pouvons répondre à la première
question de l'aire, pour cela nous pouvons écrire le script Scheme
suivant ayant comme entrée les deux bases et la hauteur du trapèze~:

\drgeoIndex{Script}{Exemples}{Aire d'un trapèze}{}

\begin{quote}{\begin{verbatim}
define AB (getLength a1))
(define DC (getLength a2))
(define AD (getLength a3))
(/ ( * AD (+ AB DC )) 2 )
\end{verbatim}
}
\end{quote}

\drgeoIndex{Script}{Exemples}{Différence de longueur de segments}{}
Nous calculons la longueur du segment $BH$ en écrivant un script
Scheme avec comme objet en entrée les segments $AB$ et $CD$, et le
texte du script est le suivant~:
\begin{quote}{\begin{verbatim}
(define AB (getLength a1))
(define CD (getLength a2))
(- AB CD)
\end{verbatim}
}
\end{quote}



\drgeoIndex{Script}{Exemples}{Théorème de Pythagore}{}
À ce stade, nous pouvons appliquer le théorème de Pythagore dans le
triangle rectangle $CHB$. Ici aussi nous utilisons un script Scheme
avec comme objets en entrée le segment $CH$ et le script $BH$~:
\begin{quote}
{
\begin{verbatim}
(define CH (getLength a1))
(define BH (getValue a2))
(+ (* CH CH) (* BH BH))
\end{verbatim}
}
\end{quote}

\drgeoIndex{Script}{Exemples}{Racine carrée}{}
Finalement nous pouvons obtenir la valeur du segment $BC$ en calculant
la racine carrée de la valeur retournée par le script précédent~:
\begin{quote}
{
\begin{verbatim}
(define q (getValue a1))
( sqrt q )
\end{verbatim}
}
\end{quote}

Les deux scripts précédents peuvent être regroupés en un seul script
 un peu plus élaboré.

\drgeoIndex{Script}{Exemples}{Périmètre}{}
Maintenant nous pouvons conclure l'exercice en calculant le périmètre
 avec un script Scheme~:
\begin{quote}
{
\begin{verbatim}
(define AB (getLength a1))
(define CB (getValue  a2))
(define DC (getLength a3))
(define AD (getLength a4))
(+ (+ AB CB )(+ DC AD ))
\end{verbatim}
}
\end{quote}

\section{Théorème et conjectures}

Les \link{scripts Scheme}[ Section \Ref, page \Pageref]{script} 
permettent de résoudre des exercices mais aussi de comprendre de façon
plus approfondie l'énonciation des théorèmes et de vérifier des
conjectures.

Dans cette section nous commençons par analyser le théorème de
Tolomeo~:

\begin{quote}
\em Étant donné un quadrilatère inscrit dans un cercle
la somme du produit des côtés opposés est égale 
au produit des diagonales.
\end{quote}

Nous pouvons construire la figure avec \drgeo{} comme ci-dessous

\drgeoFigureSize{Théorème de Tolomeo: quadrilatère convexe}{dafig2}{8}

où nous avons implémenté deux scripts qui calculent respectivement la
somme du produit des côtés opposés et le produit des diagonales. 
\drgeoIndex{Script}{Exemples}{Théorème de Tolomeo}{}

Le premier script est le suivant~:
\begin{quote}
{
\begin{verbatim}
(define AB (getLength a1))
(define DC (getLength a2))
(define BC (getLength a3))
(define AD (getLength a4))
(+ (* AB DC )(* BC AD ))
\end{verbatim}
}
\end{quote}

Le second script est~:
\begin{quote}
{
\begin{verbatim}
(define DB (getLength a1))
(define AC (getLength a2))
(* DB AC )
\end{verbatim}
}
\end{quote}

Comme nous pouvons le voir les valeurs retournées par les deux
scripts, en accord avec le théorème de Tolomeo, sont les
mêmes\footnote{Il ne s'agit que d'une vérification numérique.}. Lorsque
nous modifions dynamiquement la figure, les valeurs des scripts sont
toujours identiques, sauf dans la situation suivante~:

\drgeoFigureSize{Théorème de Tolomeo: quadrilatère non convexe}{dafig3}{8}

où le quadrilatère perd sa convexité.

Dans ce cas le théorème n'est pas vrai et l'énoncé précédent n'est pas
bien énoncé, il doit donc être reformulé comme ci-dessous~:

\begin{quote}
\em Étant donné un quadrilatère CONVEXE inscrit dans un cercle 
la somme du produit des côtés opposés est égale 
au produit des diagonales.
\end{quote}

À ce stade les conjectures apparaîssent naturellement~: est-ce que le
théorème de Tolomeo est valide pour un quadrilatère convexe non
inscrit dans un cercle~?

Avec \drgeo{} nous pouvons vérifier que cette conjecture est fausse
comme le montre la figure suivante~:

\drgeoFigureSize{Réfutation de la conjecture}{dafig4}{8}

Le lecteur n'aura pas de difficulté à utiliser \drgeo{} dans la
construction d'exemples didactiques, probablement plus connus,
relativement aux théorèmes de Pythagore et d'Euclide.


\section{Nombre irrationnel}
\drgeoIndex{Figure Scheme de \drgeo{}}{Exemples}{Spirale de Teodoro}{}

Une construction classique, relative au nombre irrationnel, connue
sous le nom de spirale de Teodoro, permet de construire
géométriquement la racine carrée de nombres entiers à partir d'un
triangle rectangle isocèle.

Considérons le triangle $OAB$ où $OA=1$~:

\drgeoFigureSize{Construction de la racine de 2}{dafig7}{8}

Par le théorème de Pythagore nous avons $OB$ égale à la racine carrée
de 2. Si maintenant, avec la figure, nous construisons un nouveau
triangle rectangle en $B$, avec les côtés $OB$ et $BC$ tel que $BC=1$.

\drgeoFigureSize{Construction de la racine 3}{dafig8}{8}

Toujours par le théorème de Pythagore, il est clair que l'hypothénuse
$OC$ de $OBC$ a pour longueur la racine carrée de 3. En itérant le
processus précédent à l'infini nous obtenons toutes les racines
carrées des nombres naturels.

La nature itérative de la construction s'adapte parfaitement à
l'utilisation des FSD. Considérons alors le code suivant~:

\begin{quote}
{
\begin{verbatim}
(new-figure "Triangle")

(define (triangle p1 p2 p3 n)
  (let* ((s1 (Segment "" extremities    p1 p2))
         (s2 (Segment "" extremities    p2 p3))
         (s3 (Segment "" extremities    p3 p1))
         (pe (Line    "" orthogonal     p3 s3))
         (ci (Circle  "" center-segment p3 s2))
         (p4 (Point   "" intersection2  pe ci)))
    (send pe masked)
    (send ci masked)
    (send p4 masked)
    (if (> n 0)
       (triangle p1 p3 p4 (- n 1)))))


(lets Point "O" free  0  0)
(lets Point "A" free -1  0)
(lets Point "B" free -1  1)
(triangle O A B 15)
\end{verbatim}
}
\end{quote}

Le triangle du début est défini à travers les coordonnées seulement
par commodité. Le code est la transcription littérale de la procédure
itérative décrite précédement.  Une fois évalué par \drgeo{} le code
donne la figure suivante~:

\drgeoFigureSize{Spirale de Teodoro}{dafig9}{8} 
 
Les hypothénuses de chaque triangle ont pour longueur les racines
carrées des nombres entiers naturels compris entre 2 et 17.


\section{Spirale de Baravelle}

\drgeoIndex{Figure Scheme de \drgeo{}}{Exemples}{Spirale de
Baravelle}{}

Comme nous l'avons vu précédement, à l'aide de FSD il est possible de
construire de façon intuitive et simple des figures permettant de
\emph{visionner} des situations qui en programmation sont récursives
-- ou cycliques.

Nous pouvons un peu approfondir cet aspect, en modifiant le code
Scheme utilisé pour la construction des nombres irrationnels, afin
d'obtenir une figure fameuse de la littérature des mathématiques, à
savoir la spirale de Baravelle.

Le code Scheme définissant la spirale est le suivant~:

\begin{quote} 
\begin{verbatim} 
(new-figure "Baravelle")
 
(define (triangle p1 p2 p3 n)   
  (let* ((s1  (Segment "" extremities    p1 p2))
         (s2  (Segment "" extremities    p2 p3))
         (s3  (Segment "" extremities    p3 p1))
         (m   (Point   "" middle-2pts    p1 p3))
         (r   (Segment "" extremities    m  p3))
         (pe  (Line    "" orthogonal     p3 s3))
         (ci  (Circle  "" center-segment p3 r ))
         (p4  (Point   "" intersection2  pe ci)))
    (send pe  masked)
    (send ci  masked)
    (send p4  masked)
    (send m   masked)
    (if (> n 0)
      (triangle  m  p3  p4 (- n 1)))))
   
 
(lets Point "A" free  0  5)
(lets Point "B" free  5  5)
(lets Point "C" free  5  0)
(triangle A B C 9)
 
(lets Point "D" free  0 -5)
(lets Point "E" free -5 -5)
(lets Point "F" free -5  0)
(triangle D E F 9)
\end{verbatim}
\end{quote}

\drgeoFigureSize{La spirale de Baravelle suite à l'évaluation du
code Scheme}{dafig10}{8}

À partir de la figure et du code Scheme correspondant nous percevons
bien la nature itérative du mécanisme de construction de la figure. Un
problème intéressant que nous laissons au lecteur, consiste à établir
à quel moment les deux rameaux de la spirale convergent.

Une petite variation supplémentaire du code précédent~:

\begin{quote}
\begin{verbatim}
(new-figure "Spirale")

(define (square p1 p2 p3 p4 n)
  (let* ((s1 (Segment "" extremities p1 p2))
         (s2 (Segment "" extremities p2 p3))
         (s3 (Segment "" extremities p3 p4))
         (s4 (Segment "" extremities p4 p1))
         (A (Point "" on-curve s1 1/10))
         (B (Point "" on-curve s2 1/10))
         (C (Point "" on-curve s3 1/10))
         (D (Point "" on-curve s4 1/10)))
     (send A masked)
     (send B masked)
     (send C masked)
     (send D masked)
     (if (> n 0)
       (square A B C D (- n 1)))))

(lets Point "M" free 5 5)
(lets Point "N" free -5 5)
(lets Point "O" free -5 -5)
(lets Point "P" free 5 -5)

(square M N O P 30)
\end{verbatim}
\end{quote}

conduit à une spirale simplifiée.
 
\drgeoFigureSize{Spirale simplifiée}{dafig11}{8}

Le lecteur est invité à se divertir en créant de nouvelles
variations~!

\T \clearpage

\section{Catena di Pappo}
\drgeoIndex{Figure Scheme de \drgeo{}}{Exemples}{Catena di Pappo}{}

Une utilisation de base de Figure Scheme de \drgeo\ consiste en la
reproduction de figure dont nous connaissons les caractéristiques
analytiques. 

L'exemple de construction que nous proposons est représenté par la
fameuse ''Catena di Pappo''.

\drgeoFigureSize{Catena di Pappo}{dafig12}{8}

Les centres et rayons successifs des cercles qui la constituent ont
une expression analytique connue, il est donc aisé de reproduire la
figure en tant de FSD.
  
\begin{quote}
\begin{verbatim}
(new-figure "Pappo")

(define (circle n)
(let*(
  (r (Numeric "" free 0 0 (/ 15 ( + 6 (* n n )))))
  (c (Point   "" free (* 5 (/ 15 ( + 6 (* n n )))) 
                      (* 2 (* n (/ 15 ( + 6 (* n n )))))))
  (p (Circle "" center-radius c r )))
 (send r masked)
 (if (> n 0)
    (circle (- n 1)))))

(circle 8)

(lets Point "A" free 5 0)
(lets Point "O" free 0   0)
(lets Point "B" free 15 0)
(lets Point "M" middle-2pts B O)
(lets Circle "" 2points M O)
(lets Circle "" 2points A O)
(lets Line   "" 2points A O)
\end{verbatim}
\end{quote}

le code de la figure est relativement intuitif et ne nécessite pas de
commentaire.  

Un exercice non trivial, que nous laissons au lecteur, consiste à
déterminer une construction à la règle et au compas conduisant à une
implémentation itérative.

\section{Calcul de $\pi$}

Le calcul approximatif de $\pi$ a joué un rôle important dans
l'histoire des Mathématiques. Les méthodes pour ce type de calcul sont
diverses et contiennent souvent des améliorations d'une méthode à
l'autre. Nous vous proposons une approche du problème très simplifiée
que nous appelons -- même si ce n'est pas tout à fait exacte --
\textbf{Méthode par exhaustion}. Cette approche a toutefois l'avantage
de montrer l'essence même de la méthodologie.

Nous commençons avec la construction suivante d'un hexagone inscrit
dans un cercle à partir du côté $BC$. Nous notons au passage qu'il
est possible à partir de cette construction de construire et mémoriser
une macro que nous pouvons nommer \textit{Hexagone}.

\drgeoFigureSize{Hexagone régulier inscrit}{dafig5}{8}

L'idée de la méthode par exhaustion consiste dans un premier temps à
approximer la longueur du cercle avec le périmètre $P_{0}$ de
l'hexagone et de calculer une approximation de $\pi$ dividende de
$P_{0}$ par le diamètre du cercle. Clairement l'approximation de $\pi$
obtenue sera de 3.

Lors d'une deuxième étape nous pouvons, en utilisant \drgeo,
construire un côté du dodécagone inscrit dans le cercle. Nous
calculons son périmètre $P_{1}$ ainsi qu'une approximation successive
de $\pi$ comme dividende de $P_{1}$ par le diamètre.

\drgeoFigureSize{Approximation de $\pi$}{dafig6}{8}

En augmentant le nombre de côtés du polygone régulier inscrit nous
obtenons de meilleures approximations.

\chapter{Astuces diverses}

\section{Créer un polygone régulier}
\label{polygon_macro}

\drgeoIndex{Macro-construction}{Polygone}{}{}
\drgeoIndex{Polygone}{Macro-construction}{}{}
\drgeoIndex{Macro-construction}{Script}{}{}

\drgeo\ peut créer des macro-constructions comportant des éléments de
construction indépendants (i.e. des points libres, des valeurs libres,
des scripts sans parent). Pour ce faire \drgeo\ prend l'initiative de
donner une ou des valeurs aux paramètres libres de ces
objets\footnote{Sinon, la macro-construction ne pourrait pas être
instanciée. Par exemple quelle valeur donner à un objet de type valeur
libre intervenant dans la séquence de construction~?}. La ou les
valeur(s) choisie(s) sont en fait celle(s) de l'objet servant de modèle
lors de la création de la macro.

Dans la suite, un petit exemple permettant de créer des polygones
réguliers à $n$ côtés est présenté. En plus des macro-constructions,
un script Scheme intervient dans le processus.

L'exemple est guidé pas à pas mais le lecteur non familier avec les
macro-constructions, les scripts ou plus généralement le
fonctionnement de \drgeo\ est fortement invité à lire les sections
précédentes.

\subsection{Le modèle de polygone}

Pour commencer, créer un point libre, puis un script sans parent --
après avoir choisi l'outil script cliquer directement sur le fond de
la figure. Éditer le script et lui donner comme valeur~:

\begin{verbatim}
(/ (* 2 (acos -1)) 7)
\end{verbatim}

Le résultat de ce script servira pour construire par rotation un
polygone régulier à 7 côtés. Placer ensuite une valeur libre de valeur
2, ce sera le rayon de notre polygone.

Construire un cercle de centre le point et de rayon la valeur. Sur ce
cercle placer un point. Nommer ce point $O$.

Maintenant utiliser l'outil rotation pour créer l'image de O par la
rotation d'angle la valeur du script et de centre le centre du cercle.
Continuer ensuite successivement jusqu'à obtenir les 7 sommets du
polygone. Relier les sommets par des segments.

\drgeoFigureSize{Résultat de la construction du polygone régulier à
7 côtés}{fig61}{8}

\subsection{La macro-construction du polygone}

Ouvrir la boîte de dialogue de création de
macro-construction et construire comme suit la macro~:

\begin{enumerate}
\item \textbf{paramètre d'entrée~:} le centre du cercle~;
\item \textbf{paramètres de sortie~:} le point $O$ et les 7 côtés du
polygone.
\end{enumerate}

Voilà, la macro est prête. 

Pour créer un polygone régulier à 7 côtés, ouvrir la boîte de dialogue
d'exécution d'une macro, il suffit de sélectionner un point de la
figure.

\subsection{Quelques considérations}

Lorsque \drgeo\ rencontre des éléments libres dans une
macro-construction, il fixe leur valeur en prenant celle du modèle.
Dans notre exemple, le script, la valeur et le point O sont de tels
éléments libres. Lorsque la macro-construction est exécutée, ils sont
fixés comme suit~:

\begin{itemize}
\item la valeur à 2~;
\item le script à \texttt{(/ (* 2 (acos -1)) 7)}~;
\item le point sur le cercle avec la même abscisse curviligne que $O$.
\end{itemize}

C'est ce dernier point qui donne tout son sens à l'utilisation
conjointe des macro-constructions avec des scripts ou d'autres objets
libres.

\section{Imprimer une figure}

\drgeoIndex{Figure}{Imprimer}{}{}
\drgeoIndex{Imprimer}{Figure}{}{}

Le plus simple est d'exporter la figure au format PostScript --
\link{Exportation PostScript}[ Section \Ref, page
\Pageref]{exporter-ps}. Utiliser ensuite un logiciel permettant de
visionner des documents PostScript et imprimer le document. Le
document imprimé de la sorte est de qualité vectorielle. Les logiciels
GhostView, Gnome GhostView ou encore K GhostView conviennent
parfaitement.

\section{Placer un paragraphe de texte dans une figure}

\drgeoIndex{Afficher}{Texte}{}{}
\drgeoIndex{Figure}{Afficher}{Texte}{}

On peut avantageusement utiliser les scripts, d'une façon certes
détournée. Se placer dans le mode de création de script --
\link{Outil Script}[ Section \Ref, page \Pageref]{script-tool} --
cliquer directement sur le fond de l'écran. De cette façon un script
sans paramètre d'entrée est créé. 

Ensuite éditer les propriétés du script -- \link{Propriétés d'un
  objet}[ Section \Ref, page \Pageref]{property-item}. Dans la zone
texte où le code Scheme est normalement écrit, placer un texte entre
guillemets précédé de l'apostrophe, par exemple~:

\begin{verbatim}
'"Animation et observations
================
Déplace les points de la figure pour répondre aux questions suivantes.

 1. Où faut-il placer le point A pour que le point A' soit confondu avec le point A ?
 2. Où faut-il placer le point A pour que le point A' soit confondu avec le point B ?
 3. Comment faut-il placer le point I pour que les points B', C' et I soient alignés ?
 4. Quel est le symétrique du point I ? Quel est le symétrique du point A' ?"
\end{verbatim}

\drgeoFigureSize{Exemple de paragraphe de texte dans une figure}{fig58}{10}

Comme pour tout script, il est également possible de changer la
couleur du texte.


\W \chapter*{Index}
\W \htmlprintindex

\W \begin{iftex} 
\appendix 
\listoffigures 
\printindex 
\W \end{iftex}

\chapter{Historique}

\section*{Rédactions originales de la documentation}

Hilaire Fernandes (anglais et français), Andrea Centomo (italien).

\section*{Traductions vers le français}

Jean-Philippe Georget, Hilaire Fernandes.

\section*{Relectures}

François Audirac, Odile Benassy, Gérard Blanchet, Guy Veyssière.


\chapter{GNU Free Documentation License}
\input{../fdl}


\end{document}


% LocalWords:  Guile Homothétie homothétie macro-construction glisser-déposer
% LocalWords:  redessinée

