8.6. TP Calcul géométrique en 2D/3D#

nécessite la validation du notebook ClassTriangle (classe Triangle)

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_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_)
_npoly_ = 5 + np.random.randint(10)
_rpoly_ = 1.0 + np.random.randint(10)
_dx_ = np.round(_rpoly_*(5*np.random.rand()),2)
_dy_ = np.round(_rpoly_*(5*np.random.rand()),2)

8.6.1. Objectif#

On se propose d’utiliser les 2 classes précédentes Point et Triangle pour effectuer le maillage en triangle de polygones reguliers dans le plan.

Un polygone regulier de n cotés est un polygone dont les n points sont équi-réparties sur un cercle.

8.6.2. Points du polygône#

8.6.2.1. Ecrire la fonction pts_polygone#

qui renvoie la liste des points d’un polygone régulier de N points centré en O et de rayon R

from Triangle import *
def pts_polygone(O,N,R):
    '''polygone régulier centré en O de N cotés, de rayon R '''
PolyPts = pts_polygone(Point(0.,0.),_npoly_,_rpoly_)
assert(type(PolyPts) is list)
assert(type(PolyPts[0]) is Point)
assert(len(PolyPts) == _npoly_)

8.6.2.2. Vérification#

calculer puis tracer le polygone PolyPts

printmd("**polygone avec N={} points et un rayon R={}**".format(_npoly_,_rpoly_))
from Triangle import *
PolyPts = pts_polygone(Point(0.,0.),_npoly_,_rpoly_)
## BEGIN SOLUTION
# tracer
## END SOLUTION

8.6.3. Fonction tri_polygone pour trianguler le polygone#

en utilisant le centre du polygone et ses points, écrire une fonction tri_polygone qui générer la liste des N triangles du polygone à partir de la liste des points sur le polygone PolyPts.

def tri_polygone(PolyPts):
    """genere la liste des triangles formant le polygone à partir de la liste des points PolyPts"""
PolyTri = tri_polygone(PolyPts)
assert(type(PolyTri) is list)
assert(type(PolyTri[0]) is Triangle)
assert(len(PolyTri) == len(PolyPts))

8.6.3.1. Application: calculer et tracer la triangulation du polygone précédent#

PolyTri = tri_polygone(PolyPts)
## BEGIN SOLUTION
# tracer
## END SOLUTION

8.6.4. Calcul de la surface du polygone#

écrire une fonction surf_polygone qui calcule la surface du polygone a partir de sa triangulation

def surf_polygone(PolyTri):
    """surface du polygone donné par la liste des triangles Polytri"""

8.6.4.1. calculer la surface du polygone précédent et vérifier le résultat#

surface = surf_polygone(PolyTri)
print("surface polygone ",surface," surface cercle ",np.pi*_rpoly_**2)
assert(surface < np.pi*_rpoly_**2)
assert(np.abs(surface-(_npoly_/2)*np.sin(2*np.pi/_npoly_)*_rpoly_**2) < 1.e-5)

8.6.5. Translation d’un polygone#

Ecrire une fonction translation_polygone qui renvoie un nouveau polygone translation de dx,dy du polygone passé en argument (liste de points) et qui renvoie la liste des points du nouveau polygone.

def translation_polygone(Poly1Pts,dx,dy):
PolyPts2 = translation_polygone(PolyPts,_dx_,_dy_)
assert(type(PolyPts2) is list)
assert(type(PolyPts2[0]) is Point)

8.6.5.1. application: translater le polygone précédent avec le pas suivant et le tracer#

printmd("translation de {} , {}".format(_dx_,_dy_))
## BEGIN SOLUTION
## END SOLUTION

8.6.5.2. tester si les 2 polygones ont une intersection#

## BEGIN SOLUTION
## END SOLUTION

8.6.5.3. Vérification#

tracer sur une meme figure les 2 polygones

## BEGIN SOLUTION
# tracer
## END SOLUTION

8.6.6. Conclusion#

écrire ici votre conclusion