« Mathématiques avec Python et Ruby/Points en Ruby » : différence entre les versions

Contenu supprimé Contenu ajouté
Annulation des modifications 446730 de CommonsDelinker (discussion)
DannyS712 (discussion | contributions)
m <source> -> <syntaxhighlight> (phab:T237267)
 
Ligne 11 :
Pour que ''Ruby'' possède un objet ''Point'', il suffit de le définir, sous la forme d'une ''classe'':
 
<sourcesyntaxhighlight lang="ruby">
class Point
 
Ligne 19 :
 
end
</syntaxhighlight>
</source>
 
Dorénavant, chaque fois qu'on crée un point par ''Point.new(x,y)'', celui-ci possédera les coordonnées ''x'' et ''y'' qui sont pour l'instant ses seules propriétés (des variables stockées temporairement dans l'objet).
Ligne 31 :
Il suffit de dire que la méthode ''x'' renvoit le nombre ''x'':
 
<sourcesyntaxhighlight lang="ruby">
def x
@x
end
</syntaxhighlight>
</source>
 
(à l'intérieur de la classe)
Ligne 43 :
Idem pour ''y'':
 
<sourcesyntaxhighlight lang="ruby">
def y
@y
end
</syntaxhighlight>
</source>
 
Dorénavant, l'abscisse de ''P'' s'appelle ''P.x'' et son ordonnée, ''P.y''.
Ligne 55 :
Pour afficher un objet, il faut utiliser la conversion ''to_s'' que ''Ruby'' propose. Dans le cas présent, puisqu'on a inventé un nouvel objet, on doit redéfinir cette conversion en chaîne de caractères en mettant les coordonnées entre parenthèses, séparées par un point-virgule:
 
<sourcesyntaxhighlight lang="ruby">
def to_s
'('+@x.to_s+';'+@y.to_s+')'
end
</syntaxhighlight>
</source>
 
Pour afficher un point ''M'', on peut faire
 
<sourcesyntaxhighlight lang="ruby">
puts(M.to_s)
</syntaxhighlight>
</source>
 
mais aussi
 
<sourcesyntaxhighlight lang="ruby">
puts(M)
</syntaxhighlight>
</source>
 
puisque ''Ruby'' se charge automatiquement de la conversion ''to_s''.
Ligne 81 :
==Milieu==
 
<sourcesyntaxhighlight lang="ruby">
def milieu(q)
Point.new((@x+q.x)/2,(@y+q.y)/2)
end
</syntaxhighlight>
</source>
 
La syntaxe est typique de ''Ruby'': On parle de "milieu avec q" en invoquant
 
<sourcesyntaxhighlight lang="ruby">
puts(p.milieu(q))
</syntaxhighlight>
</source>
 
==Vecteur==
Ligne 97 :
Un peu hors sujet ici (on en reparlera dans [[Mathématiques_avec_Python_et_Ruby/Vecteurs_en_Ruby|le chapitre qui leur est consacré]]), le vecteur <math>\overrightarrow{AB}</math> est bel et bien associé à deux points: son origine ''A'' et son extrémité ''B''. Et ses coordonnées se calculent à partir de celles de ''A'' et de ''B'':
 
<sourcesyntaxhighlight lang="ruby">
def vecteur(q)
Vecteur.new(q.x-@x,q.y-@y)
end
</syntaxhighlight>
</source>
 
Ce qui oblige, soit à placer la classe [[Mathématiques_avec_Python_et_Ruby/Vecteurs_en_Ruby|vecteur]] dans le même fichier, soit à l'importer avec
 
<sourcesyntaxhighlight lang="ruby">
require 'vector'
</sourcesyntaxhighlight>
 
si on a enregistré ladite classe dans un fichier ''vector.rb''.
Ligne 117 :
La distance jusqu'à ''q'' est un nombre, mais associé à deux points:
 
<sourcesyntaxhighlight lang="ruby">
def distance(q)
(self.vecteur(q)).norme
end
</syntaxhighlight>
</source>
 
Pour faire le plus simple possible, on a là encore utilisé le fichier des [[Mathématiques_avec_Python_et_Ruby/Vecteurs_en_Ruby|vecteurs]] sous la forme de sa méthode ''norme'': La distance AB est la norme du vecteur <math>\overrightarrow{AB}</math>, qu'on calcule avec la fonction ''hypot'' de ''Ruby'' (voir au chapitre suivant comment on l'utilise).
Ligne 127 :
Pour calculer la distance entre ''p'' et ''q'', on entre
 
<sourcesyntaxhighlight lang="ruby">
puts(p.distance(q))
</syntaxhighlight>
</source>
 
ou, au choix,
 
<sourcesyntaxhighlight lang="ruby">
puts(q.distance(p))
</syntaxhighlight>
</source>
 
=Application au problème=
Ligne 141 :
Pour récapituler, la classe ''Point'' en entier est décrite ici:
 
<sourcesyntaxhighlight lang="ruby">
class Point
 
Ligne 173 :
 
end
</syntaxhighlight>
</source>
 
C'est tout!
Ligne 179 :
On commence par créer trois points, les sommets du triangle:
 
<sourcesyntaxhighlight lang="ruby">
a=Point.new(-1,3)
b=Point.new(5,1)
c=Point.new(1,5)
</syntaxhighlight>
</source>
 
==Nature de ABC==
Ligne 189 :
Pour voir si ABC est isocèle, on peut afficher les longueurs de ses côtés:
 
<sourcesyntaxhighlight lang="ruby">
puts(a.distance(b))
puts(a.distance(c))
puts(b.distance(c))
</syntaxhighlight>
</source>
 
mais on n'apprend pas grand-chose (sinon qu'il n'est pas isocèle). Mais on peut chercher s'il est rectangle avec la réciproque du [[w:Théorème de Pythagore|théorème de Pythagore]]:
 
<sourcesyntaxhighlight lang="ruby">
puts(a.distance(b)**2)
puts(a.distance(c)**2+b.distance(c)**2)
</syntaxhighlight>
</source>
 
C'est clair, le triangle ABC est rectangle en C.
Ligne 208 :
Il en résulte alors que le cercle circonscrit a pour diamètre ''[AB]'', donc pour centre le milieu ''M'' de ''[AB]'' et pour rayon la moitié de AB:
 
<sourcesyntaxhighlight lang="ruby">
m=a.milieu(b)
 
puts(m)
</syntaxhighlight>
</source>
 
==Rayon du cercle==
Ligne 218 :
Le rayon peut se calculer en divisant par 2 la distance AB, ou mieux, en vérifiant que les trois rayons MA, MB et MC ont la même longueur à la précision permise par ''Ruby'':
 
<sourcesyntaxhighlight lang="ruby">
puts(m.distance(a))
puts(m.distance(b))
puts(m.distance(c))
</syntaxhighlight>
</source>
 
==Figure==