# Mathématiques avec Python et Ruby/Points en Ruby
## Ruby

[ Modifier le sommaire ]
L'objet Point est une bonne manière d'aborder la programmation objet. En géométrie repérée, un point est constitué de deux nombres, son abscisse et son ordonnée.
$A(-1;3)$
$B(5;1)$
$C(1;5)$

# Classe

Pour que Ruby possède un objet Point, il suffit de le définir, sous la forme d'une classe:
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).

# Coordonnées

Cependant pour accéder depuis l'extérieur aux coordonnées du point, il faut les redéfinir comme des méthodes Ruby (parce que dans Ruby, tout est méthode).

## Abscisse

Il suffit de dire que la méthode x renvoit le nombre x:
(à l'intérieur de la classe)

## Ordonnée

Idem pour y:
Dorénavant, l'abscisse de P s'appelle P.x et son ordonnée, P.y.

# Affichage

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:
Pour afficher un point M, on peut faire
mais aussi
puisque Ruby se charge automatiquement de la conversion to_s.

# Deux points

Le plus simple avec deux points, c'est le milieu, parce que c'est un objet de même type (un point):

## Milieu

La syntaxe est typique de Ruby: On parle de "milieu avec q" en invoquant

## Vecteur

Un peu hors sujet ici (on en reparlera dans le chapitre qui leur est consacré), le vecteur ${\overrightarrow {AB}}$ 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:
Ce qui oblige, soit à placer la classe vecteur dans le même fichier, soit à l'importer avec
si on a enregistré ladite classe dans un fichier vector.rb.
Là encore, on parle de méthode vecteur jusqu'à q pour un point p.

## Distance

La distance jusqu'à q est un nombre, mais associé à deux points:
Pour faire le plus simple possible, on a là encore utilisé le fichier des vecteurs sous la forme de sa méthode norme: La distance AB est la norme du vecteur ${\overrightarrow {AB}}$, qu'on calcule avec la fonction hypot de Ruby (voir au chapitre suivant comment on l'utilise).
Pour calculer la distance entre p et q, on entre
ou, au choix,

# Application au problème

Pour récapituler, la classe Point en entier est décrite ici:
C'est tout!
On commence par créer trois points, les sommets du triangle:

## Nature de ABC

Pour voir si ABC est isocèle, on peut afficher les longueurs de ses côtés:
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 théorème de Pythagore:
C'est clair, le triangle ABC est rectangle en C.

## Centre du cercle

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:

## Rayon du cercle

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:

## Figure

On peut résumer le tout en modifiant le script ci-dessus pour qu'il crée des éléments svg, dont le résultat est visible ci-dessous: