• Aucun résultat trouvé

cette derniere, pointes par les elements du tableau m oaAttributs, ou de la negation de propriete suivant la valeur du drapeau booleen m bSigne.

6.4 Classe d'un plan de construction

Parmi les methodes de resolution des contraintes geometriques que nous presentons dans la troisieme partie de ce manuscrit, l'une d'elle consiste a determiner un plan de construction de la gure a l'aide de la regle et du compas. Si un tel plan de construction a pu ^etre etabli, l'actualisation des parametres des objets de la gure au cours d'une deformation est opere suivant une approche procedurale. Cette approche consiste a recalculer les parametres des objets les uns apres les autres en suivant les etapes du plan de construction etabli.

Nous decrivons successivement dans les paragraphes suivants la structure de de-pendance utilisee pour decrire un plan de construction, ainsi que l'algorithme de pro-pagation, repris de Cabri-Geometre, utilise pour actualiser les parametres des objets lors d'animations.

6.4.1 Structure de dependance

La relation que nous avons choisie pour representer un plan de construction est la relation de dependance R, utilisee dans Cabri-Geometre, telle que deux objets x et y

sont lies par la relation xRy si la construction de l'objetx depend directement de la construction de l'objet y. Symetriquement, on dit que si deux objets x et y sont tels que xRy alors l'objety est un constituant de l'objetx. L'exemple 6.2 suivant illustre cette relation de dependance.

Exemple 6.2

Relation de dependance

Nous considerons la gure dynamique correspondant a un triangle ABC pourvu de son orthocentre H, obtenu a partir des sommets A et B du triangle et du point H. Le graphe des objets et des proprietes de cette gure est illustre par la gure 6.2(a).

Un plan de construction possible de cette derniere consiste a: 1. Creer le point A,

112 Mise en oeuvre des langages d'interface de GDRev

3. Creer le point H,

4. Construire la droite DAB passant par le point A et le point B,

5. Construire la droite DCH passant par le point H et perpendiculaire a la droite DAB,

6. Construire la droite DAH passant par le point A et le point H,

7. Construire la droite DBH passant par le point B et le point H,

8. Construire la droite DAC passant par le point A et perpendiculaire a la droite DBH,

9. Construire la droite Dbc passant par le point B et perpendiculaire a la droite DAH,

10. Construire le point A a l'intersection de la droites DAB et de la droite DAC. Ce plan de construction conduit au graphe des dependances illustre par la gure 6.2(b).

Pour etablir de telles relations, nous avons de ni une classe permettant de lier des instances d'objets de la hierarchie des classes d'objets geometriques. Cette classe est la classe CStructureDependanceque nous illustrons par le tableau 6.2.

Cette classe est constituee d'un attribut de type entierm iType identi ant le type de la relation de dependance, liant l'objet de ni par cette relation, et pointe par

m pObjDe ni a ces constituants au nombre de m iNbConstituants et pointes par les elements du tableau m oaConstituants.

La principale methode de cette classe est la fonctionRecalculerObjet. Celle-ci se re-sume a appeler la fonction de calcul associee au type de la relation de nie et pointee par l'attributpFctCalcul. Ces fonctions de calcul sont les fonctions protegeesCalculDroite,

CalculDroitePerpendiculaire, ::: speci ques aux di erentes relations de dependance qui retournent faux si l'objet n'a pas pu ^etre determine, et vrai sinon.

6.4.2 Propagation de la deformation

L'actualisation des objets d'une gure lors de l'animation d'un point de celle-ci a l'aide d'un plan de construction de cette derniere consiste a determiner dans un etape preliminairela liste des objets de la gure modi es et l'ordre d'actualisation de ceux-ci.

6.4 Classe d'un plan de construction 113

AH

Hauteur D Hauteur DBH Droite DAB

Légende

: relation de dépendance entre objets

: arête correspondant à une propriété de perpendicularité : arête correspondant à une propriété d’appartenance

BH Hauteur D Droite DAB

Hauteur DAH

Point A Point H Point B

(a) AC Hauteur D Droite D CH Droite DBC PointC

Point A Point H Point B

CH AC Droite D Hauteur D Droite DBC (b) PointC

Fig. 6.2 { Graphe des proprietes et des dependances d'un triangle et de son ortho-centre.

Une fois cette liste etablie, pour chacune des positions prises par le point deplace au cours de l'animation il s'agit pour le systeme de:

1. recalculer les positions des objets, 2. e acer la gure,

3. reacher les objets de la gure.

Cette etape preliminaire se ramene a un tri topologique sur le sous-graphe des dependances issu de l'objet selectionne. Une maniere d'e ectuer un tel tri topologique est de concatener les listes des dependances des objets deplaces a la suite les unes des autres en prenant garde lors de l'elimination des occurrences multiples de garder la derniere occurrence.

114 Mise en oeuvre des langages d'interface de GDRev

class CStructureDependance: public CObject f

== Attributs

public:

=* Type de la relation de dependance *= int m iType;

=* Nombre de constituants de la relation de dependance *= int m iNbConstituants;

=* Pointeur vers l'objet de ni par la relation de dependance *= CObjForme * m pObjDe ni;

=* Tableau de pointeurs vers les constituants de l'objet de ni par la relation de dependance *=

CTypedPtrArray<CObArray, CObjForme*> m oaConstituants;

=* Pointeur vers la fonction de calcul associe a la relation de dependance *= BOOL (CMyStructureDependance::*pFctCalcul) ();

== Operations

public:

=* Fonction de calcul d'un objet *=

BOOL RecalculerObjet( )f return (this->*pFctCalcul)();g; :::

== Operations

protected:

=* Fonction de calcul d'une droite passant par deux points *= BOOL CalculDroite( );

=* Fonction de calcul d'une droite perpendiculaire passant par un point *= BOOL CalculDroitePerpendiculaire( );

::: g;

Tab. 6.2 { Classe CMyStructureDependance.

Exemple 6.3

Propagation de la deformation

On considere la gure dynamique correspondant a un triangle ABC pourvu de son orthocentre H, obtenu a partir des sommets A et B du triangle et du point H. L'objet selectionne pour une animation est le point H. La gure 6.3 donne le graphe des

de-6.4 Classe d'un plan de construction 115

pendances des objets ainsi que le sous-graphe des objets modi es suite au deplacement du point H.

: Sous-graphe des dépendances issu du point H : Relation de dépendance

Point A Point H Point B

Droite AC Droite BC PointC Hauteur CH Hauteur AH Hauteur BH Droite AB Légende

Fig. 6.3 { Graphe des dependances d'un triangle et de son orthocentre.

Les listes des dependances des di erents objets de la gure sont reprises dans le tableau 6.3 .

La concatenation des listes des dependances issues du point H donne : Point H, Hauteur DAH, Hauteur DBH, Hauteur DCH, Droite DBC, Droite DAC, Point C, Point C.

L'elimination des occurrences multiples conduit a la liste d'actualisation ordonnee : Point H, Hauteur DAH, Hauteur DBH, Hauteur DCH, Droite DBC, Droite DAC, Point C.

Les performances de cette approche sont dicilement mesurables. Elle donne une impression de uidite et de continuite n'ayant aucune commune mesure avec les situa-tions ou de tels plans de construction n'ont pu ^etre etabli.

116 Mise en oeuvre des langages d'interface de GDRev

Objets Listes des dependances

Les points

Point A Hauteur DAH, Droite DAB, Droite DAC

Point B Hauteur DBH, Droite DAB, Droite DBC

Point C

Point H Hauteur DAH, Hauteur DBH, Hauteur DCH

Les droites Droite DAB Hauteur DCH Droite DAC Point C Droite DBC Point C Hauteur DAH Droite DBC Hauteur DBH Droite DAC Hauteur DCH

Tab. 6.3 { Listes des dependances d'un triangle construit a partir de ses sommets A et B et de son orthocentre H.