On souhaite dans cet exercice construire une figure géométrique à l'aide d'un processus itératif : nous allons reproduire, à plusieurs reprises, les mêmes étapes de construction.
On considère pour débuter trois points non alignés \(A\), \(B\) et \(C\) formant un triangle et l'on place, à l'intérieur du triangle\(ABC\), un point \(P\) choisi de manière aléatoire.
Le processus répété est le suivant :
Étape 1: on choisit aléatoirement un des points \(A\), \(B\) ou \(C\);
Étape 2: on construit le milieu du segment d'extrémités \(P\) et le sommet choisi à l'étape 1;
Étape 3: on considère désormais que \(P\) est le milieu obtenu à l'étape 2.
De façon générale, à chaque étape, on construit un « nouveau » point \(P\) à partir du précédent.
Cette construction permet d'obtenir une « jolie » figure... Laquelle ? Pour le savoir, vous devrez réussir l'exercice !
Cet exercice comporte plusieurs questions permettant d'envisager successivement les différentes étapes de la construction.
Les éditeurs associés à chaque question restent toutefois indépendants : vous pouvez les aborder dans l'ordre souhaité.
Dessiner des points
On utilise sur cette page une fonction dessine_point qui prend en paramètre un point et affiche ce point sur une figure. Par exemple, le code ci-dessous permet de dessiner le point A à l'écran :
Utilisation de dessine_point
A=(50,50)dessine_point(A)
Cette fonction est déjà chargée dans l'éditeur : il ne faut pas la rédiger. Vous devez simplement l'utiliser !
Reproduire la figure ci-dessous dans laquelle les sommets du rectangle ont pour coordonnées :
\(\left(0~;~0\right)\) ;
\(\left(400~;~ 0\right)\) ;
\(\left(400~;~ 200\right)\) ;
\(\left(0~;~ 200\right)\).
Les autres points sont régulièrement espacés de \(20\) pixels.
Boucle for
On pourra utiliser une boucle for comme dans l'exemple ci-dessous qui dessine le premier « segment » du rectangle :
forxinrange(0,420,20):# x varie entre 0 (inclus) et 420 (exclu), de 20 en 20P=(x,0)dessine_point(P)
###(Dés-)Active le code après la ligne # Tests (insensible à la casse) (Ctrl+I)
Entrer ou sortir du mode "deux colonnes" (Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran" (Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Le point \(P\), utilisé au départ de la construction, doit être choisi aléatoirement à l'intérieur du triangle \(ABC\). Nous allons pour ce faire calculer une moyenne pondérée des coordonnées des sommets.
L'idée est la suivante :
on se donne trois points \(A~\left(x_A~;~y_A\right)\), \(B~\left(x_B~;~y_B\right)\) et \(C~\left(x_C~;~y_C\right)\) ;
on choisit aléatoirement trois coefficients strictement positifs \(a\), \(b\) et \(c\) dont la somme est non nulle ;
Soit \(M\) et \(N\) deux points du plan de coordonnées \(\left(x_M~;~y_M\right)\) et \(\left(x_N~;~y_N\right)\). Ces points sont représentés en Python par deux couples de nombres (x_M,y_M) et (x_N,y_N).
Écrire la fonction milieu qui prend en paramètres les couples de coordonnées M et N des points \(M\)
et \(M\) et renvoie les coordonnées du milieu de \(\left[MN\right]\).
x, y = coords
On rappelle que Python permet facilement de récupérer les différents éléments d'un couple de coordonnées en faisant par exemple :
Récupérer des coordonnées
>>> coords=(3,5)>>> x,y=coords>>> x3>>> y5
Entier\(\longrightarrow\) Décimal
Lorsque Python effectue une division, il considère toujours que le résultat est un nombre décimal (un nombre flottant dit-on en informatique).
C'est pourquoi l'expression (2+6)/2 est évaluée à 4.0.
placer un point aléatoirement à l'intérieur d'un triangle ;
calculer les coordonnées du milieu d'un segment.
Nous pouvons donc, en assemblant ces différents éléments, construire la figure souhaitée.
Quelques dernières remarques :
on propose d'utiliser les points \(A\), \(B\) et \(C\) de coordonnées \(A~(0~;~0)\), \(B~(500~;~0)\) et \(C~(250~;~433)\) mais vous pouvez utiliser d'autres points ;
la fonction milieu est déjà importée dans l'éditeur, vous pouvez directement l'utiliser ;
on propose de répéter le processus de construction \(20\) fois. Là encore vous pouvez modifier cette valeur.
Compléter l'éditeur ci-dessous afin de construire la figure souhaitée !
Rappel de l'algorithme de construction
Fixer le nombre de répétitions à 20
Créer les points A, B et C
Créer la liste des sommets contenant les points A, B et C
Dessiner les points A, B et C
Créer les coefficients aléatoires a, b et c
Calculer les coordonnées du point P initial
Dessiner le point P
Répéter "nombre de répétitions" fois :
Choisir un sommet aléatoire parmi $A$, $B$ et $C$
Remplacer les coordonnées de P par celles du milieu du segment [P ; sommet aléatoire]
Dessiner le point P
Choisir un élément aléatoire
On choisira un sommet aléatoire en utilisant la fonction choice du module random :
# Import de la fonctionfromrandomimportchoice# La liste dans laquelle nous allons piocherneveux=["Riri","Fifi","Loulou"]# Choix d'un neveu aléatoire parmi ceux listés dans « neveux »neveu_aleatoire=choice(neveux)
###(Dés-)Active le code après la ligne # Tests (insensible à la casse) (Ctrl+I)
Entrer ou sortir du mode "deux colonnes" (Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran" (Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
# Tests(insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)