TNSI, Exercices POO : Applications à la Géométrie⚓︎
Classe Point
-
Créer une classe
Point
ayant les attributs suivants :__x
: un attribut privé pour l'abscisse, qui est de typefloat
__y
: un attribut privé pour l'ordonnée qui est de typefloat
- Par défaut, un Point est initialisé à
O(0;0)
On pourra utiliser un constructeur__init__()
ayant deux paramètresx
ety
-
Créer les getters
getX()
etgetY()
qui permettent de lire respectivement l'abscisse et l'ordonnée d'un point.
Créer les setterssetX(self, valeur)
etsetY(self, valeur)
qui permettent de modifier respectivement les abscisses et l'ordonnée d'un point - Créer la méthode magique
__repr__()
qui renvoie la repré́sentation mathématique d’un point dans le Terminal :(x,y)
. - Créer la méthode
distance(self, p: `Point`) -> float
qui renvoie la distance entre le point de l’objet courant (self
) et l’objetp
passé en paramètre.
Rappel La distance entre deux points \(A(x_A,y_A)\) et \(B(x_B,y_B)\), en mathématiques, est égale à :
\(AB = \sqrt {(x_B−x_A)^2+ (y_B−y_A)^2)}\) - Créer la méthode
milieu(self, p: `Point`) -> `Point`
: qui permet de calculer les coordonnées du pointM
, milieu du segment défini par le point de l’objet courantself
et l’objet Pointp
passé en paramètre. Cette méthode renvoie l'objet PointM
.
Rappel : Les coordonnées du milieu \(M(x_M,y_M)\) de \(A(x_A,y_A)\) et \(B(x_B,y_B)\), sont :
\(x_M = \dfrac {x_A+x_B}{2} \quad \text{et} \quad y_M = \dfrac {y_A+y_B}{2}\)
Remarque La méthode doit renvoyer un objetPoint
et pas les coordonnées du milieu. - Créer la méthode
sym_par_rapport_a(self,p: `Point`)->Point
qui renvoie l'objet Point qui est le symétrique de l'objetself
de l'instance courante de la classe Point, par rapport au pointp
.Remarque La méthode doit renvoyer un objetPoint
et pas les coordonnées du symétrique.
Classe Droite
On considère une classe Droite
disposant des attributs suivants:
p1
: un attribut public de type Pointp2
: un attribut public de type Point
- Créer une méthode
coeff_dir()->float
oupente()->float
, qui renvoie en sortie un float : le coefficient directeura
de la droite :
Rappel :\(a = \dfrac {y_B-y_A}{x_B-x_A}\) - Créer une méthode
parallele(self, d2:Droite)->bool
qui accepte en argument d'entrée deux droitesself
etd2
, et renvoie en sortie si elles sont parallèles (True
), ou pas (False
) - Créer une méthode
secantes(self, d2:Droite)->bool
qui accepte en argument d'entrée deux droitesself
etd2
, et renvoie en sortie si elles sont sécantes (True
), ou pas (False
) - La droite \((AB)\), passant par les points \(A(x_A;y_A)\) et \(B(x_B;y_B)\), créer les deux méthodes suivantes:
- une méthode
equation_reduite()->str
qui renvoie les deux coefficientsa
etb
de l'équation réduitey=ax+b
, donnés par les deux formules suivantes :
\(a=\dfrac{y_B-y_A}{x_B-x_A} \quad et \quad b=\dfrac{x_By_A-x_Ay_B}{x_B-x_A}\) - une méthode
affiche_equation_reduite()
qui renvoie une chaîne de caractères affichant l'équation réduite de la droitey=ax+b
de l'instance courante.
- une méthode
- Créer une méthode
passePar(p:Point)->
qui renvoie un booléen:True
si l'instance courante de la droite passe par le pointp
(\(\Leftrightarrow\) les coordonnées du pointp
vérifient l'équation de la droite)False
sinon
Classe Triangle
On considére maintenant une classe appelée Triangle ayant les attributs suivants :
__p1
: un attribut privé de type Point__p2
: un attribut privé de type Point__p3
: un attribut privé de type Point
- Écrire les getters
getP1()
,getP2()
,getP3()
Écrire les setterssetP1(p : `Point`)
,setP2(p : `Point`)
,setP3(p : `Point`)
et un constructeur__init__()
acceptant trois paramètres (etself
) -
Écrire une méthode
estPlat(self) -> bool
qui :- renvoie
True
si le triangle est plat (les trois pointsp1
,p2
etp3
sont alignés) - et
False
sinon
- renvoie
-
Écrire une méthode
estIsocele(self) -> bool
qui :- renvoie
True
le triangle est Isocèle, False
sinon.
Rappel : un triangle \(ABC\) est isocèle si \(AB = AC\) ou \(AB = BC\) ou \(BC = AC\) Remarque : On pourra utiliser une classe
Racine
déjà développée, ou commencer par la créer - renvoie
-
Écrire une méthode
estEquilateral(self)->bool
qui renvoie :True
si le triangle est équilatéralFalse
sinon
- Écrire une méthode
estRectangle(self)->bool
qui renvoie :True
si le triangle est un triangle Rectangle (Dans ce cas, on précisera en quel point)False
sinon
- Dans un fichier
main.py
, tester toutes les classes et méthodes que vous avez implémentées
Classe Rectangle
- Écrire une classe
Rectangle
en langage Python, permettant de construire un rectangle dotée d'attributslongueur
(par défautlongeur=10
) etlargeur
(par défautlargeur=5
).
On pourra utiliser un constructeur__init__()
-
Créer les méthodes suivantes:
- une méthode
Perimetre()
permettant de calculer le périmètre du rectangle, et - une méthode
Aire()
permettant de calculer l'aire du rectangle
Rappel:\(Aire_{Rectangle}=largeur\times longueur\)
- une méthode
-
a. Créer les getters
getLongueur()
etgetLargeur()
qui permettent de lire (/qui renvoient) lalongueur
et lalargeur
depuis l'extérieur de la classe.
b. Créer les setterssetLongueur(L:float)
etsetLargeur(l:float)
qui permettent de modifier lalongueur
et lalargeur
depuis l'extérieur de la classe. -
a. Créer une classe fille Parallelogramme héritant de la classe Rectangle telle que :
- la classe
Parallelogramme
soit dotée en plus d'un attributhauteur
(par défauthauteur=4
) - et d'une autre méthode
Aire()
permettant de calculer le volume du Parallélogramme.
Rappel :\(Aire_{Parallelogramme} = largeur\times hauteur\)
b. Créer une classe fille Carre héritant de la classe Rectangle telle que :
- la classe
Carre
soit dotée en plus d'un attributcote
(par défautcote=5
) -
et d'une autre méthode
Aire()
permettant de calculer le volume du Carré.
Rappel :\(Aire_{Carré} = cote\times cote\) -
le constructeur
__init__()
fixe par défaut la valeur des attributs :- longueur = cote
- largeur = cote
- la classe
Classe Cercle
- Définir une classe
Cercle
permettant de créer un cercle \(C(O,r)\) de centreO(a,b)
et de rayonr
à l'aide du constructeur__init__()
- Définir une méthode
Surface()
de la classe qui permet de calculer la surface du cercle - Définir une méthode
Perimetre()
de la classe qui permet de calculer le périmètre du cercle - Définir une méthode
testAppartenance()
de la classe qui permet de tester si un pointA(x,y)
appartient ou non au cercleC(O,r)