Informatique TP3 : Interface graphiques et tracés de fractales CPP 1A

Documents pareils
Initiation à l algorithmique

point On obtient ainsi le ou les points d inter- entre deux objets».

La programmation en première année basée sur l enrichissement progressif de micromondes multi-agents

Microsoft Small Basic. A la découverte de la programmation

Chapitre 2 : Caractéristiques du mouvement d un solide

Math 5 Dallage Tâche d évaluation

Deux disques dans un carré

MAT2027 Activités sur Geogebra

EXERCICES DE REVISIONS MATHEMATIQUES CM2

Réalisation de cartes vectorielles avec Word

Sillage Météo. Notion de sillage

Construction de la bissectrice d un angle

Baccalauréat L spécialité, Métropole et Réunion, 19 juin 2009 Corrigé.

Nom : Groupe : Date : 1. Quels sont les deux types de dessins les plus utilisés en technologie?

RapidMiner. Data Mining. 1 Introduction. 2 Prise en main. Master Maths Finances 2010/ Présentation. 1.2 Ressources

Adobe Illustrator Logiciel de dessin vectoriel et de Cartographie Assistée par Ordinateur

DURÉE DU JOUR EN FONCTION DE LA DATE ET DE LA LATITUDE

Formats d images. 1 Introduction

Problèmes de dénombrement.

Une brique dans le cartable. Du Plan à l Ouvrage

PROGRAMME D HABILETÉS EN FAUTEUIL ROULANT (WSP-F)

Leçons et exemples de programmation en Logo

SEANCE 2 : éléments de programmation

Initiation à la programmation en Python

Jean Dubuffet AUTOPORTRAIT II

«Aucune investigation humaine ne peut être qualifiée de science véritable si elle ne peut être démontrée mathématiquement.

Introduction à la présentation graphique avec xmgrace

Maîtriser les fonctionnalités d un traitement de texte (Word OpenOffice)

EVALUATIONS MI-PARCOURS CM2

Statistiques Descriptives à une dimension

Pop-Art façon Roy Liechtenstein

Le seul ami de Batman

Je fais le point 1. PrénoM :... Il y a... oiseaux. Guide de l enseignant p.64. Écris les nombres dictés. Écris les nombres effacés par Gribouille.

OLYMPIADES ACADEMIQUES DE MATHEMATIQUES. 15 mars 2006 CLASSE DE PREMIERE ES, GMF

Systèmes de transmission

TUTORIEL PAINTPOT. Louise Henninot - Anne- Cécile Patou - Julie Roquefort

AC AB. A B C x 1. x + 1. d où. Avec un calcul vu au lycée, on démontre que cette solution admet deux solutions dont une seule nous intéresse : x =

Plus petit, plus grand, ranger et comparer

Les algorithmes de base du graphisme

Je découvre le diagramme de Venn

TD de supervision. J.P. Chemla. Polytech Tours Département productique 2ème année

Situation d apprentissage Les traits vivants avec le logiciel LopArt DUO (#P002)

Sommaire de la séquence 10

La fonction exponentielle

Comparer des surfaces suivant leur aire en utilisant leurs propriétés géométriques Découverte et manipulation

Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT

VOS PREMIERS PAS AVEC TRACENPOCHE

Vision industrielle et télédétection - Détection d ellipses. Guillaume Martinez 17 décembre 2007

v Sygic, a.s. All rights reserverd. Manuel utilisateur

ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview.

Indications pour une progression au CM1 et au CM2

QoS Réseaux haut débit et Qualité de service

Découverte du logiciel ordinateur TI-n spire / TI-n spire CAS

VOCABULAIRE LIÉ AUX ORDINATEURS ET À INTERNET

chapitre 4 Nombres de Catalan

Paris et New-York sont-ils les sommets d'un carré?

LE PROJOPHONE de Fresnel

Manuel v. 6sV Simplement surfer. Simplement cliquer. Simplement bloguer.

Evaluation diagnostique de CM1 Circonscription de Saint Just en Chaussée Livret du maître partie Français

Exercices Alternatifs. Une fonction continue mais dérivable nulle part

Exercices Alternatifs. Une fonction continue mais dérivable nulle part

Découvrir la voûte céleste c est avant tout une balade dans le ciel qui nous entoure. Mais pour se promener d une étoile ou d une galaxie à une

1 Création d une pièce. 2 Travail complémentaire. 1-1 Réglage des barres d outils. 1-2 Exemples de réalisation de pièces à l aide d un modeleur 3D

Le contexte. Le questionnement du P.E.R. :

Ch.G3 : Distances et tangentes

Chapitre 4 Pierre, papier, ciseaux

CORRIGE LES NOMBRES DECIMAUX RELATIFS. «Réfléchir avant d agir!»

Création d une SIGNATURE ANIMÉE avec PHOTOFILTRE 7

Réseau d Éducation Prioritaire de Harnes. Défis-math Énoncés

LA PHYSIQUE DES MATERIAUX. Chapitre 1 LES RESEAUX DIRECT ET RECIPROQUE

CHAPITRE. Le mouvement en une dimension CORRIGÉ DES EXERCICES

Trois personnes mangent dans un restaurant. Le serveur

Logiciel SCRATCH FICHE 02

Cours 7 : Utilisation de modules sous python

POM Monitoring V4.0. Release Note fonctionnelle

Tâche complexe produite par l académie de Clermont-Ferrand. Mai 2012 LE TIR A L ARC. (d après une idée du collège des Portes du Midi de Maurs)

Designer d escalier GUIDE DE L UTILISATEUR. Stair Designer-1

Jeux mathématiques en maternelle. Activités clés. Jeu des maisons et des jardins (Yvette Denny PEMF)

«Petit guide d utilisation Prezi» par Marc Nolet

Tutorial pour colorier les cheveux avec Photoshop

Table des matières. F. Saint-Germain / S. Carasco Document réalisé avec OpenOffice.org Page 1/13

Savoir lire une carte, se situer et s orienter en randonnée

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

COMPTE-RENDU «MATHS EN JEANS» LYCEE OZENNE Groupe 1 : Comment faire une carte juste de la Terre?

Lecture graphique. Table des matières

Faire part naissance coquelicot

Travaux pratiques avec RapidMiner

Mystères au PLUS! Jeu pédagogique pour les Sciences de la Vie et de la. Frédéric BLASSELLE, PLUS de Cappelle-la-Grande

My Custom Design ver.1.0

Premiers Pas avec OneNote 2013

Q6 : Comment calcule t-on l intensité sonore à partir du niveau d intensité?

Solution dédiée aux canalisations de distribution

Découvrez ce que votre enfant peut voir

INFO 2 : Traitement des images

CHAPITRE. Le mouvement en deux dimensions CORRIGÉ DES EXERCICES

AGASC / BUREAU INFORMATION JEUNESSE Saint Laurent du Var Tel : bij@agasc.fr Word: Les tableaux.

DOCM Solutions officielles = n 2 10.

Utilisation du logiciel GALAAD

Date : Tangram en carré page

Transcription:

Informatique TP : Interface graphiques et tracés de fractales CPP 1A Romain Casati, Wafa Johal, Frederic Devernay, Matthieu Moy Avril - juin 014 Ce TP est dédié à la construction de courbes fractales. La notion de récursivité peut être illustrée géométriquement par des fractales. Ce TP débute par une présentation de fonctions graphiques de Python. Il vous est ensuite demandé de construire un certain nombre de courbes fractales. 1 Le module turtle de Python Nous allons utiliser l outil turtle afin de réaliser ce TP. La fenêtre graphique Turtle de Python est assimilable à un ensemble de points d un plan. Chaque point est désigné par deux coordonnées entières sur le plan. L origine (coordonnées (0, 0)) est située au centre de la fenêtre. La taille de la fenêtre par défaut est de (400, 00). 1.1 Les fonctions graphiques de base Le principe de turtle est simple : la tortue est le triangle affiché au milieu de l écran. On peut faire avancer, reculer, et tourner la tortue. Par défaut, la tortue trace un trait derrière elle quand elle se déplace. Exercice 1 Entrez ceci dans l interprète Python : >>> from turtle import * >>> forward(100) >>> right(10) >>> forward(100) >>> right(10) >>> forward(100) Vous devriez voir apparaître un triangle. La première ligne dit à Python que l on va utiliser turtle. Les suivantes sont des instructions qu on donne à la tortue. Bien sûr, on peut combiner ces instructions avec les constructions Python classiques. Par exemple, dessiner un triangle comme ci-dessus est aussi simple que : for i in range ( ): 4 forward ( 100) 5 right ( 10) 7 mainloop () 1

Figure 1 Fonctionnement de trace_polygone (La ligne mainloop() permet d éviter que la fenêtre se ferme toute seule à la fin du programme) Plus précisément, le TP nécessite l utilisation des fonctions suivantes : forward(longueur ) : fait avancer la tortue de longueur pixels. left(angle ), right(angle ) : fait tourner la tortue sur elle même de angle, en degrés. penup() : permet de lever le crayon en vue de déplacement sans tracer. pendown() : pose le crayon, le prochain forward() tracera un trait. goto(x, y) ou goto([x, y]) : sert à déplacer le curseur vers un point dont on précise les coordonnées. Remarque : Pour des informations complémentaires sur le graphisme en Python (il existe d autres fonctions), vous pouvez consulter le manuel (voir la page https://docs.python.org/.4/library/ turtle.html). 1. Tracé de quelques figures simples Exercice (Tracé d un carré) Modifiez le programme de tracé de triangle ci-dessus pour tracer un carré (il est conseillé de l écrire dans un fichier, mais ce fichier ne doit pas s appeler turtle.py). Exercice (Tracé d un carré avec une fonction) Modifiez le programme de tracer de carré pour emballer le code dans une fonction. La longueur du côté est un paramètre de la fonction : 1 def trace_ carre ( longueur ): # à vous de compl é ter Appelez cette fonction plusieurs fois avec plusieurs paramètres différents. Exercice 4 Pour généraliser l exercice précédent, écrire une fonction trace_polygone(longueur, nb_cotes) qui trace un polygone à nb_cotes côtés. La figure 1 montre les étapes du tracé d un triangle, d un carré et d un hexagone. Exercice 5 (Tracé d une étoile) Écrire un programme Python dessinant une étoile à branches, comme ceci :

Indice : pour tracer une branche de l étoile, il faut deux segments donc deux appels à forward() (avec un appel à right() pour former le sommet de l étoile). Avec une boucle, on évite de dessiner les branches à la main. Exercice Que fait le programme suivant? Essayez de deviner avant d exécuter le programme. for i in range ( 0): 4 forward (1) 5 right (1) 7 mainloop () Exercice 7 Que fait le programme suivant? Essayez de deviner avant d exécuter le programme. for i in range ( 5): 4 forward ( 00) 5 right (0 * /5) 7 mainloop () Une première courbe fractale : le flocon de von Koch.1 Les fractales Une fractale est une sorte de courbe mathématique un peu complexe extrêmement riche en détails, et qui possède une propriété intéressante visuellement : lorsque l on regarde des détails de petite taille, on retrouve des formes correspondant aux détails de plus grande taille (auto-similarité).. Le flocon de von Koch La première courbe à tracer a été imaginée par le mathématicien suédois Niels Fabian Helge von Koch, afin de montrer que l on pouvait tracer des courbes continues en tout point, mais dérivables en aucun. Le principe est simple : on divise un segment initial en trois morceaux, et on construit un triangle équilatéral sans base au-dessus du morceau central. On réitère le processus n fois, n étant appelé l ordre. Dans la figure suivante on voit les ordres 0, 1, et de cette fractale. Si on trace trois fois cette figure, on obtient successivement un triangle, une étoile, puis un flocon de plus en plus complexe :

Figure Le Chou Romanesco : exemple classique de fractale naturelle Le dessin de la fractale à l ordre 0 est trivial, il suffit d appeler forward() une fois. À l ordre 1, on va appeler quatre fois forward(), en appelant left() et right() pour changer la direction de la tortue entre chaque segments. À l ordre n 1, on va appliquer le même principe qu à l ordre 1, mais en remplaçant les appels à forward() par des dessins de segments à l ordre n 1. Une fractale ressemblant au flocon de Koch existe chez votre marchand de légumes : le Chou Romanesco (figure ) est constitué de plusieurs pointes, chacune constituée de plusieurs pointes, chacune constituée de plusieurs pointes... jusqu à l ordre 5 ou! Exercice 8 (Koch à l ordre 1) Écrivez une fonction koch_1(longueur) qui dessine un segment de Koch à l ordre 1, de la longueur spécifiée. Les sous-segments de la figure sont de longueur longueur, et les angles sont de 0 ou 10 degrés. Appelez cette fonction depuis votre programme pour vérifier son fonctionnement. Exercice 9 (Début de généralisation : ordre 0 ou 1) Modifiez votre fonction pour lui faire prendre en paramètre l ordre de la fractale. La fonction est maintenant koch(n, longueur), ou n est l ordre. Modifiez le corps de la fonction pour qu elle gère correctement les cas n = 0 et n = 1 (le cas n 1 viendra plus tard). Le code va ressembler à : 1 if n == 0: # Cas n == 0 ( trivial en utilisant forward ()). else : 4 # cas n == 1, comme ci - dessus. Vérifiez que la fonction marche correctement pour ces deux valeurs. Étonnement, il n y a presque rien à changer pour généraliser notre fonction à une valeur quelconque de n. Pour l instant, le cas n = 1 appelle 4 fois la fonction forward, qui correspond au cas n = 0. Nous avons vu que la fractale à l ordre n devait utiliser la fractale à l ordre n 1 (c est le cas puisque 0 = 1 1). En remplaçant les appels à forward par des appels à koch(n - 1,...), on ne changera pas le comportement de notre fonction koch à l ordre 1, mais on lui permettra de gérer correctement les ordres n. Exercice 10 (Koch à l ordre n) Modifiez la fonction Koch comme expliqué ci-dessus pour gérer les ordres n. Testez votre fonction avec différentes valeurs de n (en pratique, on ne voit plus grand chose avec un ordre supérieur à 5 ou ). Une manière de tester est d utiliser le morceau de code suivant : 4

1 for i in range ( 10): penup () goto (0, 70 * i) 4 pendown () 5 koch (i, 00) L exécution peut être assez lente. Deux astuces pour l accélérer : Appeler speed(0) avant de dessiner : ceci va régler la vitesse de la tortue au maximum. Appeler hideturtle() avant de dessiner, et showturtle() après. Le triangle représentant la tortue ne sera pas redessiné à chaque étape, on gagne beaucoup de temps. Arbre fractal On peut appliquer le même principe pour construire d autre fractales visuellement différentes, mais construites sur le même principe. Par exemple, pour construire un arbre, on part d un segment, et on applique la transformation suivante à chaque segment de la construction (on refait la transformation n fois pour obtenir un arbre d ordre n) : Les portions dessinées en pointillées sont celles sur lesquelles on va appliquer la transformation à l ordre suivant (on les appellera les segments non-terminaux). Les portions dessinées en trait plein sont des segments qui ne seront pas transformés (on les appellera les segments terminaux). Plus précisément, la transformation à appliquer est la suivante : l l θ θ l l Pour transformer un segment non-terminal de longueur l, on trace un segment terminal de longueur l l, puis deux segments non-terminaux de longueur à un angle θ du premier segment. On peut choisir θ = 0 degrés par exemple. Exercice 11 (Arbre fractal) Suivez la même démarche que pour le flocon de Koch pour écrire une fonction arbre(n, longueur) qui trace l arbre, et repositionne la tortue à son point de départ. Dans un premier temps, gérer l ordre 0 (trivial) et 1 (à base de forward() et sans appel récursif), et tester votre fonction. Vérifiez en particulier que la tortue est bien revenue à son point de départ à la fin de l exécution de la fonction dans les deux cas (n = 0 et n = 1). 5

Pour chaque tracé de segment non-terminal, remplacez l appel à forward() par un appel récursif à arbre(), et vérifiez le comportement de votre fonction à différents ordres. Cette fois-ci, une profondeur 10 ou 11 donne un résultat assez joli. Si on veut un dessin plus joli, on peut jouer sur l épaisseur des traits et les couleurs. Par exemple, si on choisit comme épaisseur de trait la valeur de n pour les valeurs de n non-nulles, et qu on colorie en rouge les segments tracés pour n == 0, on obtient la figure. (a) arbre(1, 00) (b) arbre(, 00) (c) arbre(11, 00) Figure Copie d écran du résultat de l exéction de arbre() pour différentes valeurs de n Exercice 1 (Question subsidiaire...) Combien feuilles a un arbre à l ordre n? Combien de segments élémentaires a un segment de Koch à l ordre n? Pour ceux qui n en ont jamais assez : sur le même principe, on peut dessiner la courbe du dragon, ou la courbe de Hilbert (qui permet de montrer que R et R ont le même cardinal). Wikipedia est votre ami ;-).

4 Solution des exercices Exercices, et 4 : tracer un carré : for i in range ( 4): 4 forward ( 100) 5 right (90) 7 def trace_ carre ( longueur ): 8 for i in range ( 4): 9 forward ( longueur ) 10 right ( 90) 11 1 def trace_ polygone ( longueur, nb_ cote ): 1 for i in range ( nb_ cote ): 14 forward ( longueur ) 15 right (0 / nb_cote ) Exercice 5 : étoile à branches for i in range ( ): 4 forward ( 100) 5 right ( 10) forward ( 100) 7 left (0) 8 9 mainloop () Exercice : le code trace un polygone régulier à 0 côtés. Visuellement, c est un cercle. Exercice 7 : c est une étoile à 5 branches. Exercice 8 : Koch à l ordre 1 1 def koch_ 1 ( longueur ): forward ( longueur /) left (0) 4 forward ( longueur /) 5 right ( 10) forward ( longueur /) 7 left (0) 8 forward ( longueur /) Exercice 10 : Koch à l ordre n speed (0) # Pour acc é l é rer la tortue 4 5 def koch ( n, longueur ): if n == 0: 7 forward ( longueur ) 8 else : 9 koch ( n - 1, longueur /) 10 left (0) 11 koch ( n - 1, longueur /) 1 right ( 10) 1 koch ( n - 1, longueur /) 14 left (0) 7

15 koch ( n - 1, longueur /) 1 17 for i in range ( 10): 18 penup () 19 goto (0, 70 * i) 0 pendown () 1 koch (i, 00) # Pour que la fen ê tre ne se ferme pas tout de suite 4 mainloop () Exercice 11 : Arbre fractal speed (0) 4 5 angle =0 7 def arbre ( n, longueur ): 8 if n == 0: 9 color (" red ") 10 forward ( longueur ) 11 backward ( longueur ) 1 color (" black ") 1 else : 14 width (n) 15 forward ( longueur / ) 1 left ( angle ) 17 arbre ( n - 1, longueur / * ) 18 right (* angle ) 19 arbre ( n - 1, longueur / * ) 0 left ( angle ) 1 backward ( longueur / ) left (90) 4 hideturtle () 5 arbre (11, 500) showturtle () 7 8 mainloop () Exercice 1 : n feuilles pour l arbre, 4 n segents pour Koch. Ça croît vite (048 feuilles pour notre arbre à n = 11, 409 côté pour Koch à l ordre )! 8