8.4. TP Manipulation de points en 2D#
vous devez écrire les fonctions dont le nom est fixé, mais dont vous devez spécifier les arguments en fonction de la question posée.
Chaque fonction validée rapporte 1 point
Attention: exécuter toutes les cellules depuis le début en utilisant le bouton run
%matplotlib inline
import os,sys
import numpy as np
import matplotlib.pyplot as plt
from validation.validation import check_function,liste_functions,info_function,info_etudiant
from IPython.display import Markdown, display
def printmd(string):
display(Markdown(string))
# test si numero étudiant spécifier
try: NUMERO_ETUDIANT
except NameError: NUMERO_ETUDIANT = None
if type(NUMERO_ETUDIANT) is not int :
printmd("**ERREUR:** numéro d'étudiant non spécifié!!!")
NOM,PRENOM,NUMERO_ETUDIANT = info_etudiant()
#raise AssertionError("NUMERO_ETUDIANT non défini")
# parametres spécifiques
_uid_ = NUMERO_ETUDIANT
_precis_ = 1.0e-5
printmd("**Login étudiant {} {} uid={}**".format(NOM,PRENOM,_uid_))
np.random.seed(_uid_)
Xpts = 4*np.random.rand(4)-2.
Ypts = 4*np.random.rand(4)-2.
# recharge les modules
%load_ext autoreload
8.4.1. Objectif#
On se propose d’écrire une classe Python pour manipuler des points en 2D.
Nous allons utiliser l’éditeur de texte et l’interpréteur IPython de JupyterLab
Pour accéder à l’interface jupyerlab, entrée l’URL suivante dans le navigateur (ou cliquer sur le lien suivant)
https://jupyter-exam.mecanique.univ-lyon1.fr/user/pxxxx/lab
où pxxxxx est votre numéro d’étudiant avec le premier chiffre remplacé par p (i.e. votre compte étudiant).
8.4.2. Classe Point en 2D#
8.4.2.1. Canvas de la classe Point#
Compléter la classe de base Point qui dans l’espace cartésion en 2D permet de définir des points par leurs coordonnées (X,Y).
Écrire la classe et les méthodes dans le fichier Point.py
Vous devez implémenter les méthodes définies dans cette classe et les valider soit dans le notebook soit en utilisant la commande test_exo pour valider la fonction func (correspondant au text exok)
test_exo Point.py exok func
S=['exo500', 'exo501', 'exo502', 'exo503', 'exo504','exo505','exo506', 'exo507', 'exo508']
Func=['']
Exos=liste_functions(S,_uid_)
Meth=['_eq_','rayon','angle','distance','rotation','translation','polaire','distance','produit_vect']
printmd("**Fonctions à valider**")
print("nbre de fonctions= ",len(Exos))
print(Exos)
print("fonctions/methodes à écrire")
print(Meth)
printmd("**Fonctions à valider**")
# definition des fonctions
for k in range(len(Exos)):
print("Exercise {} fonction à écrire: {}".format(Exos[k],Meth[k]))
info_function(Exos[k])
8.4.3. Bibliothèque Point.py#
cat Point.py
8.4.4. fonction distance pour calculer la distance entre 2 points#
8.4.4.1. Vérification#
from Point import *
P1=Point(1,2)
P2=Point(2,3)
print("Point:",P1,P2,"dist:",distance(P1,P2))
8.4.4.2. test de validation#
exo = "exo507"
assert(check_function(Point,exo,arg_exo=distance))
8.4.5. fonction produit_vect pour calculer le produit scalaire de 3 points#
8.4.5.1. Vérification#
from Point import *
P1 = Point(1,2)
P2 = Point(2,1)
P3 = Point(1,2)
print(produit_vect(P1,P2,P3))
8.4.5.2. test validation#
exo = "exo508"
assert(check_function(Point,exo,arg_exo=produit_vect))
8.4.6. test égalité de 2 points (méthode eq )#
8.4.6.1. vérification#
from Point import *
P1 = Point(1,1)
P2 = Point(1,2)
print("P1==P1 ? ",P1==P1)
print("P1==P2 ? ",P1==P2)
8.4.6.2. test de validation#
exo = "exo500"
assert(check_function(Point,exo))
8.4.7. calcul du rayon d’un point / origine (methode rayon)#
8.4.7.1. vérification#
from Point import *
P1 = Point(1,2)
P2 = Point(2,1)
print("rayon de P1",P1.rayon())
print("rayon de P2",P2.rayon())
8.4.7.2. test de validation#
exo = "exo501"
assert(check_function(Point,exo))
8.4.8. calcul de l’angle d’un point / origine (methode angle)#
8.4.8.1. vérification#
from Point import *
P1 = Point(1,2)
P2 = Point(2,1)
print("angle de P1",P1.angle())
print("angle de P2",P2.angle())
8.4.8.2. Test de validation#
exo = "exo502"
assert(check_function(Point,exo))
8.4.9. calcul de la distance du point à un autre (methode distance)#
8.4.9.1. vérification#
from Point import *
P1 = Point(1,2)
P2 = Point(2,1)
print("distance de P1 a P2",P1.distance(P2))
8.4.9.2. test de validation#
exo = "exo503"
assert(check_function(Point,exo))
8.4.10. rotation d’un point (rotation)#
8.4.10.1. vérification#
from Point import *
P1 = Point(2,2)
O = Point(1,1)
print("P1:",P1)
P1.rotation(O,90)
print("rotation de P1 de 90 degre / O ",P1)
8.4.10.2. test de validation#
exo = "exo504"
assert(check_function(Point,exo))
8.4.11. translation d’un point (translation)#
8.4.11.1. vérification#
from Point import *
P1 = Point(2,2)
print("P1:",P1)
P1.translation(0,1)
print("translation de P1 de 1 suivant y",P1)
8.4.11.2. test de validation#
exo = "exo505"
assert(check_function(Point,exo))
8.4.12. coordonnées polaires d’un point (methode polaire)#
8.4.12.1. vérification#
from Point import *
P1 = Point(2,2)
print("P1:",P1," coordonnées polaires ",P1.polaire())
8.4.12.2. test de validation#
exo = "exo506"
assert(check_function(Point,exo))
8.4.13. Tracer de points#
Tracer les points dont les coordonnees sont données par les 2 tableaux Xpts et Ypts
## BEGIN SOLUTION
## END SOLUTION
8.4.14. FIN#