« Programmation objet et géométrie/Objets géométriques de DrGeoII » : différence entre les versions

Contenu supprimé Contenu ajouté
Annulation des modifications 446763 de CommonsDelinker (discussion)
DannyS712 (discussion | contributions)
m <source> -> <syntaxhighlight> (phab:T237267)
Ligne 26 :
Mais pour éviter de multiplier le nombre de variables, ''m'' sera au début le vecteur directeur de la droite, obtenu par ''droite direction''; et ''p'' commencera sa vie comme le point d'abscisse 0.5 sur la droite (dans un repère lié à la droite). Le script suivant, dès qu'on a cliqué sur une droite, attend l'endroit de la figure où il va afficher son équation réduite. L'intérêt essentiel est que si on bouge les points qui définissent la droite, on a une mise à jour automatique de l'équation réduite:
 
<sourcesyntaxhighlight lang="smalltalk">
eqred: droite
"équation réduite de la droite"
Ligne 39 :
e:='y=',m,'x+(',p,')'.
^ e.
</syntaxhighlight>
</source>
 
Son exécution produit la figure suivante, où la cerise sur le gâteau est que les nombres sont donnés sous forme de fraction, donc en valeur exacte:
Ligne 53 :
Comme ''DrGeoII'' est un logiciel de [[w:Géométrie dynamique|géométrie dynamique]], on va résoudre le système graphiquement. Mais par des scripts. Le plus long c'est encore l'écriture des équations cartésiennes, avec un script analogue à celui ci-dessus pour les équations réduites. On utilise les variables ''a'', ''b'' et ''c'' pour les coefficients de l'équation ''ax+by=c'' et ''e'' pour l'équation elle-même. Mais ''c'' est utilisée pour stocker temporairement le vecteur directeur à partir duquel on récupère ''a'' et ''b'':
 
<sourcesyntaxhighlight lang="smalltalk">
equation: droite
"équation cartésienne"
Ligne 68 :
e:=a,'x + (',b,') y = ',c.
^ e.
</syntaxhighlight>
</source>
 
L'exécution de ce script produit, après le choix d'une droite, l'écriture de son équation cartésienne. On va donc l'exécuter sur chacune des droites pour avoir successivement les deux équations.
Ligne 74 :
Pour construire l'intersection, pas besoin de script puisqu'il suffit d'utiliser l'outil adéquat de DrGeoII; le script suivant va juste afficher ses coordonnées sous forme d'une chaîne de caractères (une fois qu'on l'a sélectionné):
 
<sourcesyntaxhighlight lang="smalltalk">
affichage: p
| nom|
nom:='(',(p point x asString),';',(p point y asString),')'.
^ nom.
</syntaxhighlight>
</source>
 
Le résultat final ressemble à ceci:
Ligne 105 :
Parmi tous les points d'une droite (AB), il y en a un qui est le plus proche d'un point ''M'' donné. ''DrGeoII'' est capable de le construire:
 
<sourcesyntaxhighlight lang="smalltalk">
|figure d m p|
figure:=DrGeoCanvas new.
Ligne 115 :
parents: {d. m}.
p color: Color cyan.
</syntaxhighlight>
</source>
 
Quelques explications sur cette figure (où le projeté orthogonal est dynamique, au sens où on peut déplacer les éléments de la figure et voir le point le plus proche évoluer):
Ligne 139 :
Pour additionner les deux vecteurs, on va créer un script ''SmallTalk'' dans la figure, dont le contenu est le suivant:
 
<sourcesyntaxhighlight lang="smalltalk">
somvect: v1 and: v2
^v1 direction + (v2 direction).
</syntaxhighlight>
</source>
 
Ce script additionne deux vecteurs ''v1'' et ''v2'' et retourne les coordonnées de leur somme. Il fonctionne parce que ''v1'' et ''v2'', en tant que vecteurs, héritent de l'objet ''direction'' une méthode ''+'', correspondant à la somme des vecteurs (ou des points d'ailleurs). Une fois le script enregistré avec ''Control+S'', on peut le retrouver dans la liste des scripts, puisqu'on connaît son nom ''somvect''. Si on le sélectionne, on clique successivement sur les deux vecteurs puis à un endroit vide de la figure. Ce qui fait apparaître l'expression en mauve ci-dessus, ''6.0@2.0'' qui signifie que les coordonnées de la somme sont (6;2). Pour représenter le vecteur, on crée son extrémité, en choisissant l'outil ''point par coordonnées'' et en cliquant sur les coordonnées en mauve. Ce point est également en mauve sur la figure, et bouge avec les points A et B. Enfin le vecteur mauve a été créé à partir de ses extrémités jaune et mauve, puis son représentant a rejoint les deux autres. La figure montre alors comment on additionne deux vecteurs avec la [[w:Règle du parallélogramme|règle du parallélogramme]]. Si on préfère illustrer la somme de deux vecteurs par la [[w:Relation de Chasles|relation de Chasles]], on déplace juste le représentant du vecteur vert:
Ligne 152 :
Encore un excellent exemple de surcharge de méthode: Le cercle possède aussi (comme la droite, ci-dessus) une méthode ''closestPointTo'' qui permet, parmi les points du cercle de centre A passant par B, d'avoir le plus proche d'un point M donné:
 
<sourcesyntaxhighlight lang="smalltalk">
|figure d m p|
figure:=DrGeoCanvas new.
Ligne 162 :
parents: {d. m}.
p color: Color cyan.
</syntaxhighlight>
</source>
 
L'effet est intéressant si M est à l'intérieur du cercle.
Ligne 175 :
Pour cela on va juste faire la même chose que ci-dessus, mais en créant un polygone C comme dans l'article [[Programmation objet et géométrie/Programmation avec DrGeoII]]:
 
<sourcesyntaxhighlight lang="smalltalk">
|figure fonction p C sommets O|
Ligne 192 :
parents: {C. O}.
p color: Color cyan.
</syntaxhighlight>
</source>