Différences entre les versions de « Mathématiques avec Python et Ruby/Points en Python »

m
<source> -> <syntaxhighlight> (phab:T237267)
(Annulation des modifications 446728 de CommonsDelinker (discussion))
m (<source> -> <syntaxhighlight> (phab:T237267))
 
Le point de coordonnées ''(x,y)'' est, en ''Python'', une classe:
 
<sourcesyntaxhighlight lang="python">
class Point:
def __init__(self,x,y):
 
 
</syntaxhighlight>
</source>
 
Lorsqu'on crée un point, ses coordonnées sont stockées à l'intérieur de l'objet. On note ''p.x'' et ''p.y'' les coordonnées de ''p''.
La méthode peut ressembler à ceci:
 
<sourcesyntaxhighlight lang="python">
def affichage(self):
return '('+str(self.x)+';'+str(self.y)+')'
 
</syntaxhighlight>
</source>
 
mais on peut envisager d'y rajouter des instructions avec ''TkInter'' pour réellement dessiner le point sur la figure. Voir à ce sujet [[Mathématiques_avec_Python_et_Ruby/Fonctions_en_Python|le chapitre sur les fonctions]].
Les coordonnées du milieu d'un segment sont les moyennes de celles des extrémités:
 
<sourcesyntaxhighlight lang="python">
def milieu(self,p):
return Point((self.x+p.x)/2,(self.y+p.y)/2)
 
 
</syntaxhighlight>
</source>
 
En se rappelant que l'équivalent en [[w:Java (langage)|Java]] de ''self'' est ''this'', on remarque une certaine ressemblance avec les codes sources de logiciels de géométrie dynamique:
Tout d'abord, [[w:CaRMetal|CaRMetal]]:
 
<sourcesyntaxhighlight lang="java">
setXY((P1.getX() + P2.getX()) / 2, (P1.getY() + P2.getY()) / 2);
</syntaxhighlight>
</source>
 
Ensuite, [[w:GeoGebra|GeoGebra]]:
 
<sourcesyntaxhighlight lang="java">
M.setCoords(
(P.inhomX + Q.inhomX) / 2.0d,
(P.inhomY + Q.inhomY) / 2.0d,
1.0);
</syntaxhighlight>
</source>
 
Remarque: Ces codes sources sont sous license [[w:License publique générale GNU|GPL]] ce qui autorise à les citer, au nom de la [[w:Logiciel_libre#Définition|liberté numéro 1]] (celle d'étudier le logiciel) de [[w:Richard Stallman|Richard Stallman]].
Le vecteur d'origine ''A'' et d'extrémité ''B'', noté <math>\overrightarrow{AB}</math>, est un vecteur! On le définira donc au [[Mathématiques_avec_Python_et_Ruby/Vecteurs_en_Python|chapitre suivant]] mais il peut servir ici:
 
<sourcesyntaxhighlight lang="python">
def vecteur(self,p):
return Vecteur(p.x-self.x,p.y-self.y)
 
</syntaxhighlight>
</source>
 
==Distance==
Pour simplifier l'écriture de la distance ''AB'' on va encore utiliser les [[Mathématiques_avec_Python_et_Ruby/Vecteurs_en_Python|vecteurs]], la distance ''AB'' étant égale à <math>\|\overrightarrow{AB}\|</math>:
 
<sourcesyntaxhighlight lang="python">
def distance(self,p):
return self.vecteur(p).norme()
 
</syntaxhighlight>
</source>
 
=Application au problème=
Voici l'objet ''Point'' en entier:
 
<sourcesyntaxhighlight lang="python">
from math import *
 
return self.vecteur(p).norme()
 
</syntaxhighlight>
</source>
 
==Nature de ABC==
Pour savoir si ABC est isocèle, on peut calculer les longueurs de ses trois côtés:
 
<sourcesyntaxhighlight lang="python">
a=Point(-1,3)
b=Point(5,1)
print(a.distance(c))
print(b.distance(c))
</syntaxhighlight>
</source>
 
Visiblement, ABC n'est pas isocèle. Mais
 
<sourcesyntaxhighlight lang="python">
print(a.distance(b)**2)
print(a.distance(c)**2+b.distance(c)**2)
</syntaxhighlight>
</source>
 
La réciproque du [[w:Théorème de Pythagore|théorème de Pythagore]] nous apprend que ABC est rectangle en C, donc d'[[w:Hypoténuse|hypoténuse]] ''AB''.
Donc le cercle circonscrit a pour diamètre ''[AB]'', donc pour centre le milieu de ''[AB]'':
 
<sourcesyntaxhighlight lang="python">
m=a.milieu(b)
 
print(m.affichage())
</syntaxhighlight>
</source>
 
==Rayon du cercle==
On peut donc diviser par 2 la distance ''AB'' mais aussi vérifier que ''M'' est équidistant de ''A'', ''B'' et ''C'':
 
<sourcesyntaxhighlight lang="python">
print(m.distance(a))
print(m.distance(b))
print(m.distance(c))
</syntaxhighlight>
</source>
 
==Figure==
1 535

modifications