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

8.4.14. FIN#