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.
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 dans chaque cellule
%load_ext autoreload
%autoreload 2
ERREUR: numéro d’étudiant non spécifié!!!
Login étudiant Marc BUFFAT uid=137764122
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
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)
Fonctions à valider
nbre de fonctions= 9
['exo500', 'exo501', 'exo502', 'exo503', 'exo504', 'exo505', 'exo506', 'exo507', 'exo508']
fonctions/methodes à écrire
['_eq_', 'rayon', 'angle', 'distance', 'rotation', 'translation', 'polaire', 'distance', 'produit_vect']
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])
Fonctions à valider
Exercise exo500 fonction à écrire: _eq_
Ecrire une classe pour manipuler des points en 2D, à qui on fournit les coordonnees x,y pour créer un point et qui surcharge l'operateur égalité == (methode __eq__) pour tester si deux points sont confondus (si leur distance est inférieure à 1.e-05).
On passe le nom de la classe pour la validation
Exercise exo501 fonction à écrire: rayon
Ecrire une classe pour manipuler des points en 2D, à qui on fournit les coordonnees x,y pour créer un point et qui posséde une méthode rayon qui renvoie la distance du point à l'origine.
On passe le nom de la classe pour la validation
Exercise exo502 fonction à écrire: angle
Ecrire une classe pour manipuler des points en 2D, à qui on fournit les coordonnees x,y pour créer un point et qui posséde une méthode angle qui renvoie l'angle / a Ox en degre entre -180 et +180
On passe le nom de la classe pour la validation
Exercise exo503 fonction à écrire: distance
Ecrire une classe pour manipuler des points en 2D, à qui on fournit les coordonnees x,y pour créer un point et qui posséde une méthode distance qui renvoie la distance du point à un autre point passé en argument.
On passe le nom de la classe pour la validation
Exercise exo504 fonction à écrire: rotation
Ecrire une classe pour manipuler des points en 2D, à qui on fournit les coordonnees x,y pour créer un point et qui surcharge l'operateur égalité == (methode __eq__) pour tester si deux points sont confondus (si leur distance est inférieure à 1.e-05) et qui possède une methode rotation qui effectue une rotation du point par rapport un point O avec un angle alpha en degré.
On passe le nom de la classe pour la validation
Exercise exo505 fonction à écrire: translation
Ecrire une classe pour manipuler des points en 2D, à qui on fournit les coordonnees x,y pour créer un point, qui surcharge l'operateur égalité == (methode __eq__) pour tester si deux points sont confondus (si leur distance est inférieure à 1.e-05) et qui définit une méthode translation pour translater le point de dx et dy.
On passe le nom de la classe pour la validation
Exercise exo506 fonction à écrire: polaire
Ecrire une classe pour manipuler des points en 2D, à qui on fournit les coordonnees x,y pour créer un point, avec une methode polaire qui renvoie les coordonnées polaires (rayon, angle en radian entre -pi et pi) du point.
On passe le nom de la classe pour la validation
Exercise exo507 fonction à écrire: distance
Ecrire une fonction qui calcule la distance entre 2 points d'une classe pour manipuler des points en 2D, à qui on fournit les coordonnees x,y pour créer un point.
On passe le nom de la classe et le nom de la fonction pour la validation
Exercise exo508 fonction à écrire: produit_vect
Ecrire une fonction qui calcule le produit vectoriel AB x AC, les arguments etants les 3 points A,B,C d'une classe pour manipuler des points en 2D, à qui on fournit les coordonnees x,y pour créer un point.
On passe le nom de la classe et le nom de la fonction pour la validation
8.4.3. Bibliothèque Point.py#
%%bash
cat Point.py
import numpy as np
import matplotlib.pyplot as plt
# precision des calcul geometrique
EPS_GEO = 1.e-5
# classe Point
class Point(object):
"""création d'un point dans l'espace cartesien"""
def __init__(self,x,y):
''' initialisation '''
self.x = x
self.y = y
return
def copy(self):
'''renvoie une copie du point'''
return Point(self.x,self.y)
def __str__(self):
'''conversion chaine pour affichage'''
return "Point:(%s,%s)"%(self.x,self.y)
def __eq__(self,P):
''' test si le point est confondu avec P a epsilon pres'''
return
def rayon(self):
'''calcul le rayon du point / origine'''
return
def angle(self):
'''calcul angle en degré de -180 a 180'''
return
def distance(self,P):
'''calcul la distance au point P'''
return
def rotation(self,O,beta):
'''rotation du point par rapport au point O avec angle beta (en degré)'''
return
def translation(self,dx,dy):
'''translation du point de dx,dy'''
return
def polaire(self):
'''coordonnées polaire r,theta (en radian) du point'''
return
def plot(self):
'''tracer du point'''
return
#
# Fonctions utiles
#
# distance entre 2 points
def distance(P1,P2):
""" calcul distance entre 2 points"""
return
# produit vectoriel AB x AC
def produit_vect(A,B,C):
""" calcul produit vectoriel AB.AC (cpste suivant z)"""
return
8.4.4. fonction distance pour calculer la distance entre 2 points#
8.4.4.1. Vérification#
8.4.4.2. test de validation#
8.4.5. fonction produit_vect pour calculer le produit scalaire de 3 points#
8.4.5.1. Vérification#
8.4.5.2. test validation#
8.4.6. test égalité de 2 points (méthode eq )#
8.4.6.1. vérification#
8.4.6.2. test de validation#
8.4.7. calcul du rayon d’un point / origine (methode rayon)#
8.4.7.1. vérification#
8.4.7.2. test de validation#
8.4.8. calcul de l’angle d’un point / origine (methode angle)#
8.4.8.1. vérification#
8.4.8.2. Test de validation#
8.4.9. calcul de la distance du point à un autre (methode distance)#
8.4.9.1. vérification#
8.4.9.2. test de validation#
8.4.10. rotation d’un point (rotation)#
8.4.10.1. vérification#
8.4.10.2. test de validation#
8.4.11. translation d’un point (translation)#
8.4.11.1. vérification#
8.4.11.2. test de validation#
8.4.12. coordonnées polaires d’un point (methode polaire)#
8.4.12.1. vérification#
8.4.12.2. test de validation#
8.4.13. Tracer de points#
Tracer les points dont les coordonnees sont données par les 2 tableaux Xpts et Ypts