Courbes de poursuite

Factorisation du code

En mathématiques lorsqu'une quantité apparaît plusieurs fois comme par exemple dans $x(x+1) -2(x+1)$ on la met en facteur

Ainsi $x(x+1) -2(x+1) = (x+1)(x-2)$, on a factorisé par $x+1$

De même dans un programme lorsqu'un groupe d'instructions apparaît plusieurs fois, comme dans le programme suivant (entouré en rouge), on va le mettre en commun en définissant une fonction

Puisque les instructions que l'on veut mettre en commun servent à calculer le milieu de deux points connaissant les coordonnées des deux points(x1,y1) et (x2,y2) il est naturel de nommer cette fonction milieu

 
 def milieu(x1,y1,x2,y2):
     return (x1+x2)/2,(y1+y2)/2

Cette fonction a en entrée quatre nombres, les coordonnées des points et retourne en sortie les coordonnées du milieu

En plus d'éviter les redondances dans un programme, les fonctions rendent un programme plus compréhensible

On obtient donc

On pourrait factoriser encore le programme en utilisant un objet très utile en Python, les listes, mais ce sera pour un autre TP!

Exercice

  1. Copier la fonction milieu ci-dessus dans l'interpréteur Python puis faire deux fois entrée pour observer à nouveau le symbole >>>
  2. Exécuter la fonction sur l'exemple suivant en tapant print(milieu(1,2,3,4)) vous devez observez comme résultat dans l'interpréteur (2.0,3.0)

  3. Définir la fonction distance entre deux points dont on connaît les coordonnées (x1,y1) et (x2,y2) dans l'interpréteur, pour cela vous aurez besoin de la fonction racine carrée sqrt() de la bibliothèque math
  4. Tester cette fonction pour calculer la distance entre les points de coordonnée (3;-1) et (-1;2) vous devez obtenir 5.0

Courbes de poursuite

L'ordinateur peut simuler un processus, par exemple une courbe de poursuite.

Un lièvre court vers le Nord. Un renard le poursuit en courant toujours dans sa direction. Ils avancent d'un bond de même longueur par unité de temps.Dessiner la trajectoire du renard.

Un algorithme pour simuler ce processus peut être par exemple


Fixer la longueur du bond
Placer le lièvre en (0;0)
Placer le renard en (200;200)
Mémoriser la position du lièvre
Tant que le renard n'a pas atteint le lièvre
    
    Diriger le regard du renard vers la  position du lièvre
    Faire avancer le renard d'un bond dans cette direction
    Faire avancer le lièvre d'un bond vers le Nord
    Mémoriser la position du lièvre
    

Consignes:

  1. Traduire cet algorithme en python en introduisant des variables correctement nommées, et éventuellement une fonction distance() pour traduire "le renard n'a pas atteint le lièvre"
  2. graphiquement vous devez obtenir une courbe de poursuite similaire à celle c-dessous
  3. Changer la trajectoire du lièvre, par exemple le lièvre court dans une arène carré ou circulaire