5.3 Principales fonctionnalites de construction des gures
5.3.2 Construction d'une specication
Une deuxieme maniere de fournir la specication geometrique d'une gure est de la construire en suivant une approche imperative a l'aide d'outils mis a disposition dans une barre d'outils geometriques. GDRev dispose d'un tel langage qui constitue les langages SCL et ESCL introduit dans le chapitre 4. Avec cette approche, l'utilisateur indique non seulement la specication geometrique de la gure qu'il attend, mais aussi la specication dynamique des elements qui la composent. Nous presentons d'abord les primitives de construction d'objets et de proprietes puis celles de construction de clauses.
Primitives de construction
Le langage ESCL de construction de gures geometriques que nous decrivons ici est base sur celui de Cabri-Geometre II. Ce choix n'est pas seulement lie a notre participa-tion au projet Cabri-Geometre. Il decoule des indeniables qualitees didactiques de son interface, issue d'une etude pluridisciplinaire reunissant des professeurs de college et
5.3 Principales fonctionnalites de construction des gures 89
lycee, des didacticiens et des informaticiens. La tres large diusion de Cabri-Geometre est aussi un atout incontestable puisqu'elle permet de supposer une prise en main rapide de notre systeme.
Fig. 5.4 { Barre d'outils de construction.
Les primitives de construction ESCL de GDRev sont accessibles au travers de la barre d'outils geometriques illustree par la gure 5.4. Le deuxieme, troisieme, qua-trieme et cinquieme bouton de cette barre d'outils regroupent par theme les fonction-nalites de construction de gures. Ces boutons sont respectivement dedies au point, aux objets rectilignes, au cercle et aux autres constructions.
Rappelons nous que dans GDRev, une construction est autorisee, suivant un schema d'interactionVerbe/Objet, qu'a la condition que celle-ci soit valide numeriquement. A l'inverse de Cabri-Geometre, la selection des arguments d'un outil de construction suit un ordre preetabli. De plus, les outils de constructions ne permettent actuellement pas la creation des points sur objet ou points sur deux objets a la volee. Les primitives
Droite,Demi-Droite,Segment,Cercle,Droite Perpendiculaire,Droite Parallele,Milieu,
Mediatrice et Compas supportent neanmoins la creation a la volee de point de base, c'est-a-dire de points instancies.
Les tableaux 5.1 et 5.2 detaillent les formules LDL correspondant aux primitives de construction du langage ESCL. Dans ces tableaux, l'appellationai fait reference au iiemeargument de la primitive de construction, et les appellationsi, j, ...font reference aux objets construits. Ceux-ci peuvent ^etre nommes par l'utilisateur, en utilisant tout le jeu de caracteres oert par le clavier de l'ordinateur, a l'aide de l'operationNommer,
90 Denition des langages d'interface de GDRev
mais ils sont quoi qu'il en soit identies de maniere unique par le systeme.
Primitive Arguments Formule LDL
de construction correspondante
Objets ponctuels
point aucun point(i)
point sur objet droite point(i) ^ appDr(i, a1) demi-droite point(i) ^ appDD(i, a1) segment point(i) ^ appSeg(i, a1) cercle point(i) ^ appCc(i,a1) point d'intersection droite, droite point(i) ^ appDr(i, a1)^
appDr(i, a2)
droite, demi-droite point(i) ^ appDr(i, a1)^ appDD(i, a2)
droite, segment point(i) ^ appDr(i, a1)^ appSeg(i, a2)
droite, cercle point(i) ^ appDr(i, a1)^ appCc(i, a2)
demi-droite, demi-droite point(i) ^ appDD(i, a1) ^ appDD(i, a2)
demi-droite, segment point(i) ^ appDD(i, a1) ^ appSeg(i, a2)
demi-droite, cercle point(i) ^ appDD(i, a1) ^ appCc(i, a2)
segment, segment point(i) ^ appSeg(i, a1)^ appSeg(i, a2)
segment, cercle point(i) ^ appSeg(i, a1)^ appCc(i, a2)
cercle, cercle point(i) ^ appCc(i,a1) ^ appCc(i, a2)
Objets rectilignes
droite point, point droite(i)^ appDr(a1, i)^ appDr(a2, i)
demi-droite point, point demiDroite(i,a1, l) ^ appDD(a2, i)
segment point, point segment(i,a1, a2, l)
Objets non rectilignes
cercle point, point cercle(i,a1, r) ^
appCc(a2, i) ^ distPP(r, a1, a2)
Tab.5.1 { Primitives de construction du langage ESCL
5.3 Principales fonctionnalites de construction des gures 91
Primitive Arguments Formule LDL
de construction correspondante
Autres
droite perpendiculaire point, droite droite(i)^ appDr(a1, i) ^ perp(i, a2)
point, demi-droite droite(i) ^ appDr(a1, i) ^ perp(i, a2)
point, segment droite(i)^ appDr(a1, i) ^ perp(i, a2)
droite parallele point, droite droite(i)^ appDr(a1, i) ^ par(i, a2)
point, demi-droite droite(i) ^ appDr(a1, i) ^ par(i, a2)
point, segment droite(i)^ appDr(a1, i) ^ par(i, a2)
milieu point, point point(i)^ milieu(i,a1, a2)
segment point(i)^ segment(a1, p1, p2, l) ^ milieu(i,p1,p2)
mediatrice point, point point(i)^ milieu(i,a1, a2) ^ droite(j)^ appDr(a1, j) ^ appDr(a2, j) ^ droite(k)^ appDr(i, k) ^ perp(j, k)
segment point(i)^ segment(a1, p1, p2, l) ^ milieu(i,p1,p2)^ droite(k)^ appDr(i, k) ^ perp(a1, k) compas segment, point segment(a1,p1,p2, l) ^
distance(d)^
distPP(d,p1, p2) ^ cercle(i, a2, d)
Tab. 5.2 {Primitives de construction du langage ESCL
Point cree des points instancies, la primitive Point sur objets cree des points demi-instancies et toutes les autres primitives conduisent a des objets construits. Toutefois, les points crees a la volee par les primitives Droite, Demi-Droite, Segment, Cercle,
Droite Perpendiculaire,Droite Parallele, Milieu,Mediatrice etCompas sont des points instancies.
An d'illustrer nos propos, considerons l'exemple 5.5 suivant.
Exemple 5.5
Construction d'une specificationConstruire le centre de gravite d'un triangle ABC. Le resultat de cette construction est illustre par la gure 5.5.
92 Denition des langages d'interface de GDRev
Fig. 5.5 { Construction du centre de gravite d'un triangle.
Une construction peut commencer par:
1. Creer les points A, B et C a l'aide de la primitive Point.
2. Construire a partir de ces points les segments SAB, SAC et SBC a l'aide de la primitive Segment.
3. Construire a partir des objets deja construits ou crees les milieux IAB et IAC des segments SAB et SAC a l'aide de la primitive Milieu.
4. Construire les medianes MB et MC issues respectivement des points B et C a l'aide de la primitive Droite.
5. Et enn construire le centre de gravite G a l'aide de la primitive Point d'inter-section.
La specication LDL de cette gure est :
point(A) ^ point(B) ^ point(C) ^
segment(SAB, A, B, lAB) ^ segment(SAC, A, C, lAC) ^ segment(SBC, B, C, lBC) ^
point(IAB) ^ point(IAC) ^ milieu(IAB, A, B) ^ milieu(IAC, A, C) ^ droite(MB) ^ droite(MC) ^
5.3 Principales fonctionnalites de construction des gures 93
appDr(C, MC) ^ appDr(IAB, MC) ^
point(G) ^ appDr(G, MB) ^ appDr(G, MC).
La specication dynamique de cette gure precise de plus que les points A, B et C sont des points instancies, et que tous les autres objets sont des objets construits.
Primitives de construction de clauses
Nous decrivons maintenant les aspects lies a la notion de clause introduite dans le paragraphe 4.2.2 page 63. Ces aspects concernent la saisie d'une clause et l'execution de celle-ci.
Saisie d'une clause
Nous avons explique dans le paragraphe 1.2.1 page 15 ce que Cabri-Geometre extrait de la specication d'une gure pour former une macro construction suite a la donnee d'objets initiaux et d'objets naux.La denition que nous avons donnee dans le paragraphe 4.2.2 des clauses qui rem-plissent un r^ole analogue a celuides macros constructions mais en geometriedynamique declarative, ne permet pas de proceder de la m^eme maniere. Le probleme dicile au-quel nous devons faire face est qu'il n'existe pas de structure de dependance orientee de laquelle on peut extraire un sous graphe. En geometrie dynamique declarative, la specication d'une gure peut toutefois ^etre vue sous la forme d'un graphe, ou les nuds de celui-ci sont les objets de cette derniere, et ou deux nuds sont relies entre eux par une ar^ete si et seulement si ils sont les arguments d'une m^eme propriete. De plus, les ensembles d'objets initiaux et d'objets naux ne sont pas disponibles dans une optique declarative. Une clause comporte des arguments, et a partir d'eux il faut d'ex-traire de la specication de la gure les objets intermediaires que l'utilisateur souhaite voir intervenir dans sa clause. Une fois l'ensemble des objets intermediaires connus, une idee consiste a considerer parmi les proprietes de la gure exclusivement celles faisant intervenir les objets selectionnes comme argument de la clause ou les objets intermediaires.
Il n'y a pas de regle reconnue pour resoudre ce probleme, c'est-a-dire pour deter-miner l'ensemble de ces objets intermediaires. Une premiere idee consiste a considerer comme objets intermediaires tous les objets de la gure lies directement ou indirecte-ment aux objets selectionnes comme arguindirecte-ment, prives de ces derniers. De la sorte, le graphe extrait est le sous-graphe connexe pour les arguments de la clause du graphe
94 Denition des langages d'interface de GDRev
original. Cette premiere approche a l'avantage d'^etre simple a mettre en uvre et de convenir dans de nombreux cas.
Une deuxieme idee consiste a requerir de l'utilisateur la donnee des objets inter-mediaires qu'il souhaite voir intervenir dans sa clause. De la sorte, le graphe extrait exprime la fermeture des proprietes sur les objets arguments et intermediaires. L'inte-r^et d'une telle approche est qu'elle ore a l'utilisateur une approche predictible. Son principale inconvenient est qu'elle lui impose une t^ache de selection supplementaire.
Une troisieme idee repose sur une notion de chemin dans un graphe. Muni du graphe d'une gure, nous pouvons denir la notion d'ensemble d'objets intervenant dans un chemin de longueur i comme etant l'ensemble des objets intervenant dans un chemin de longueur au plus i reliant deux arguments distincts de la clause. La saisie d'une clause peut se resumer alors a determiner la plus petite longueur de chemin telle que la clause alors formee soit valide.
La question se pose maintenant de determiner le critere de validite d'une clause ayant n arguments. Nous proposons que celui-ci soit qu'une clause est valide si tous les objets de cette derniere peuvent ^etre construits a partir de la donnee de n,1 de ces arguments.
Pour illustrer nos propos, considerons l'exemple 5.6 suivant.
Exemple 5.6
Saisie d'une clauseConsiderons que la gure construite par l'utilisateur soit celle de l'orthocentre d'un triangle. Le probleme consiste a extraire une clause reliant les points A, B, C et H. Notre vision sous forme de graphe de cette gure est illustree par la gure 5.6.
Dans cet exemple, la plus petite longueur de chemin reliant deux arguments de la clause est 2. Elle conduit a considerer comme objets intermediaires les droites DAB, DAC, DBC, DAH, DBH et DCH. La clause formee est la suivante :
orthocentre(A, B, C, H)
point(A) ^ point(B) ^ point(C) ^ point(H) ^ droite(DAB) ^ droite(DAC) ^ droite(DBC) ^ appDr(A, DAB)^ appDr(A, DAC) ^
appDr(B, DAB)^ appDr(B, DBC)^ appDr(C, DAC) ^ appDr(C, DBC)^
droite(DAH)^ droite(DBH)^ droite(DCH) ^ appDr(A, DAH) ^ appDr(H, DAH) ^
5.3 Principales fonctionnalites de construction des gures 95
Point A Point H Point B
PointC Droite D Hauteur D Hauteur D CH BH AB Hauteur DAH AC Droite D Droite D BC Légende
: Noeud correspondant à un objet sélectionné comme argument : Noeud correspondant à un objet non sélectionné comme argument : Arête correspondant à une propriété d’appartenance à une droite : Arête correspondant à une propriété de perpendicularité
Fig. 5.6 {Vision sous forme de graphe de la gure. appDr(B, DBH)^ appDr(H, DBH) ^
appDr(C, DCH) ^ appDr(H, DCH) ^
perp(DAB, DCH) ^ perp(DAC, DBH) ^ perp(DBC, DAH).
Elle est valide puisque tous les objets de cette derniere peuvent ^etre construits soit a partir des points A, B et C, ou des points A, B et H, ou des points A, C et H, ou enn des points B, C et H.
Execution d'une clause
Les clauses saisies sont mises a disposition de l'utilisateur dans la barre d'outils geometriques, comme tout autre outil. Elles suivent le m^eme mode d'interaction que les autres primitives, a savoirVerbe/Objet. De m^eme que toute primitive de construction, la selection des arguments d'une clause suit l'ordre decelle-96 Denition des langages d'interface de GDRev
ci. Enn, l'utilisateur specie qu'il ne souhaite pas selectionner un argument par un double clic sur le bouton droit de la souris.