Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f...

254
Programmation impérative en Python Cours 4. Graphismes tortue et Processing. Olivier Baldellon à partir des notes, de Pierre Lezowski, Etienne Lozes et Jean-Paul Roy Courriel : pré[email protected] Page professionnelle : http://deptinfo.unice.fr/~obaldellon/ Université de Nice Sophia Antipolis (Université Côte d’Azur), Département d’Informatique

Transcript of Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f...

Page 1: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Programmation impérative en PythonCours 4. Graphismes tortue et Processing.

Olivier Baldellon à partir des notes, de Pierre Lezowski, Etienne Lozes et Jean-Paul Roy

Courriel : pré[email protected]

Page professionnelle : http://deptinfo.unice.fr/~obaldellon/

Université de Nice Sophia Antipolis (Université Côte d’Azur), Département d’Informatique

Page 2: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Sommaire

f Partie i. Annonces

f Partie ii. Du graphisme en programmation

f Partie iii. Déplacements Absolus

f Partie iv. Déplacement relatif

f Partie v. Variables locales/globales

f Partie vi. Processing

f Partie vii. Faire des animations

f Partie viii. Gestion du clavier

f Partie ix. Table des matières1/54

Page 3: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Annonces Partie i. Annonces

QCM

Ï Il y a eu un QCM sur Moodle pendant les vacances.

Ï C’était un QCM de révision non noté

Ï Un QCM noté sera fait à la fin du TP de la semaine prochaine

Ï Vous êtes prévenu

Correction

Ï À partir de la rentrée, je ne mettrais plus les corrections sur internet.

Ï Sauf les exercices de la fin des sujets (TD, TP) qu’on n’aura pas eu letemps de faire en séance.

Ï Il faudra être présent et bien prendre les corrections.

2/54

Page 4: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Annonces Partie i. Annonces

QCM

Ï Il y a eu un QCM sur Moodle pendant les vacances.

Ï C’était un QCM de révision non noté

Ï Un QCM noté sera fait à la fin du TP de la semaine prochaine

Ï Vous êtes prévenu

Correction

Ï À partir de la rentrée, je ne mettrais plus les corrections sur internet.

Ï Sauf les exercices de la fin des sujets (TD, TP) qu’on n’aura pas eu letemps de faire en séance.

Ï Il faudra être présent et bien prendre les corrections.

2/54

Page 5: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Annonces Partie i. Annonces

QCM

Ï Il y a eu un QCM sur Moodle pendant les vacances.

Ï C’était un QCM de révision non noté

Ï Un QCM noté sera fait à la fin du TP de la semaine prochaine

Ï Vous êtes prévenu

Correction

Ï À partir de la rentrée, je ne mettrais plus les corrections sur internet.

Ï Sauf les exercices de la fin des sujets (TD, TP) qu’on n’aura pas eu letemps de faire en séance.

Ï Il faudra être présent et bien prendre les corrections.

2/54

Page 6: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Annonces Partie i. Annonces

QCM

Ï Il y a eu un QCM sur Moodle pendant les vacances.

Ï C’était un QCM de révision non noté

Ï Un QCM noté sera fait à la fin du TP de la semaine prochaine

Ï Vous êtes prévenu

Correction

Ï À partir de la rentrée, je ne mettrais plus les corrections sur internet.

Ï Sauf les exercices de la fin des sujets (TD, TP) qu’on n’aura pas eu letemps de faire en séance.

Ï Il faudra être présent et bien prendre les corrections.

2/54

Page 7: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Annonces Partie i. Annonces

QCM

Ï Il y a eu un QCM sur Moodle pendant les vacances.

Ï C’était un QCM de révision non noté

Ï Un QCM noté sera fait à la fin du TP de la semaine prochaine

Ï Vous êtes prévenu

Correction

Ï À partir de la rentrée, je ne mettrais plus les corrections sur internet.

Ï Sauf les exercices de la fin des sujets (TD, TP) qu’on n’aura pas eu letemps de faire en séance.

Ï Il faudra être présent et bien prendre les corrections.

2/54

Page 8: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Annonces Partie i. Annonces

QCM

Ï Il y a eu un QCM sur Moodle pendant les vacances.

Ï C’était un QCM de révision non noté

Ï Un QCM noté sera fait à la fin du TP de la semaine prochaine

Ï Vous êtes prévenu

Correction

Ï À partir de la rentrée, je ne mettrais plus les corrections sur internet.

Ï Sauf les exercices de la fin des sujets (TD, TP) qu’on n’aura pas eu letemps de faire en séance.

Ï Il faudra être présent et bien prendre les corrections.

2/54

Page 9: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Annonces Partie i. Annonces

QCM

Ï Il y a eu un QCM sur Moodle pendant les vacances.

Ï C’était un QCM de révision non noté

Ï Un QCM noté sera fait à la fin du TP de la semaine prochaine

Ï Vous êtes prévenu

Correction

Ï À partir de la rentrée, je ne mettrais plus les corrections sur internet.

Ï Sauf les exercices de la fin des sujets (TD, TP) qu’on n’aura pas eu letemps de faire en séance.

Ï Il faudra être présent et bien prendre les corrections.

2/54

Page 10: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Sommaire

f Partie i. Annonces

f Partie ii. Du graphisme en programmation

f Partie iii. Déplacements Absolus

f Partie iv. Déplacement relatif

f Partie v. Variables locales/globales

f Partie vi. Processing

f Partie vii. Faire des animations

f Partie viii. Gestion du clavier

f Partie ix. Table des matières3/54

Page 11: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Géométries absolues ou relatives Partie ii. Du graphisme en programmation

Les déplacements absolus

Ï Coordonnées cartésiennes (dans un repère orthonormé direct)

Ï Une opération fondamentale :Ï tracer un segment d’un point A(xa,ya) à un point B(xb,yb)

Ï Le stylo se déplace d’un point A à un point B

Les déplacements relatifs

Ï Dépendent de la position et de l’orientation de la tortue.

Ï Deux opérations fondamentales :Ï Avancer tout droit d’une certaine longueurÏ Tourner sur place d’un certain angle

Ï Le stylo est une tortue dont on guide le déplacement.

4/54

Page 12: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Géométries absolues ou relatives Partie ii. Du graphisme en programmation

Les déplacements absolus

Ï Coordonnées cartésiennes (dans un repère orthonormé direct)

Ï Une opération fondamentale :Ï tracer un segment d’un point A(xa,ya) à un point B(xb,yb)

Ï Le stylo se déplace d’un point A à un point B

Les déplacements relatifs

Ï Dépendent de la position et de l’orientation de la tortue.

Ï Deux opérations fondamentales :Ï Avancer tout droit d’une certaine longueurÏ Tourner sur place d’un certain angle

Ï Le stylo est une tortue dont on guide le déplacement.

4/54

Page 13: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Géométries absolues ou relatives Partie ii. Du graphisme en programmation

Les déplacements absolus

Ï Coordonnées cartésiennes (dans un repère orthonormé direct)

Ï Une opération fondamentale :Ï tracer un segment d’un point A(xa,ya) à un point B(xb,yb)

Ï Le stylo se déplace d’un point A à un point B

Les déplacements relatifs

Ï Dépendent de la position et de l’orientation de la tortue.

Ï Deux opérations fondamentales :Ï Avancer tout droit d’une certaine longueurÏ Tourner sur place d’un certain angle

Ï Le stylo est une tortue dont on guide le déplacement.

4/54

Page 14: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Géométries absolues ou relatives Partie ii. Du graphisme en programmation

Les déplacements absolus

Ï Coordonnées cartésiennes (dans un repère orthonormé direct)

Ï Une opération fondamentale :Ï tracer un segment d’un point A(xa,ya) à un point B(xb,yb)

Ï Le stylo se déplace d’un point A à un point B

Les déplacements relatifs

Ï Dépendent de la position et de l’orientation de la tortue.

Ï Deux opérations fondamentales :Ï Avancer tout droit d’une certaine longueurÏ Tourner sur place d’un certain angle

Ï Le stylo est une tortue dont on guide le déplacement.

4/54

Page 15: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Géométries absolues ou relatives Partie ii. Du graphisme en programmation

Les déplacements absolus

Ï Coordonnées cartésiennes (dans un repère orthonormé direct)

Ï Une opération fondamentale :Ï tracer un segment d’un point A(xa,ya) à un point B(xb,yb)

Ï Le stylo se déplace d’un point A à un point B

Les déplacements relatifs

Ï Dépendent de la position et de l’orientation de la tortue.

Ï Deux opérations fondamentales :Ï Avancer tout droit d’une certaine longueurÏ Tourner sur place d’un certain angle

Ï Le stylo est une tortue dont on guide le déplacement.

4/54

Page 16: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Géométries absolues ou relatives Partie ii. Du graphisme en programmation

Les déplacements absolus

Ï Coordonnées cartésiennes (dans un repère orthonormé direct)

Ï Une opération fondamentale :Ï tracer un segment d’un point A(xa,ya) à un point B(xb,yb)

Ï Le stylo se déplace d’un point A à un point B

Les déplacements relatifs

Ï Dépendent de la position et de l’orientation de la tortue.

Ï Deux opérations fondamentales :Ï Avancer tout droit d’une certaine longueurÏ Tourner sur place d’un certain angle

Ï Le stylo est une tortue dont on guide le déplacement.

4/54

Page 17: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Géométries absolues ou relatives Partie ii. Du graphisme en programmation

Les déplacements absolus

Ï Coordonnées cartésiennes (dans un repère orthonormé direct)

Ï Une opération fondamentale :Ï tracer un segment d’un point A(xa,ya) à un point B(xb,yb)

Ï Le stylo se déplace d’un point A à un point B

Les déplacements relatifs

Ï Dépendent de la position et de l’orientation de la tortue.

Ï Deux opérations fondamentales :Ï Avancer tout droit d’une certaine longueurÏ Tourner sur place d’un certain angle

Ï Le stylo est une tortue dont on guide le déplacement.

4/54

Page 18: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Tortue vs Python Partie ii. Du graphisme en programmation

Ï Le graphisme de la tortue a été inventé au Laboratoire d’IntelligenceArtificielle du MIT vers 1968 avec le langage LOGO.

Ï Il est disponible dans la grande majorité des langages de programmationqui offrent des facultés graphiques.

Ï En particulier dans Python 3, avec le module turtle.

from turtle import * script

Ï Un fichier optionnel turtle.cfg placé dans le répertoire de travailpermet de configurer le monde de la tortue.

Ï Ne nommez pas votre fichier turtle.py !

Ï Placer en dernière ligne du fichier l’instruction mainloop().

5/54

Page 19: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Tortue vs Python Partie ii. Du graphisme en programmation

Ï Le graphisme de la tortue a été inventé au Laboratoire d’IntelligenceArtificielle du MIT vers 1968 avec le langage LOGO.

Ï Il est disponible dans la grande majorité des langages de programmationqui offrent des facultés graphiques.

Ï En particulier dans Python 3, avec le module turtle.

from turtle import * script

Ï Un fichier optionnel turtle.cfg placé dans le répertoire de travailpermet de configurer le monde de la tortue.

Ï Ne nommez pas votre fichier turtle.py !

Ï Placer en dernière ligne du fichier l’instruction mainloop().

5/54

Page 20: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Tortue vs Python Partie ii. Du graphisme en programmation

Ï Le graphisme de la tortue a été inventé au Laboratoire d’IntelligenceArtificielle du MIT vers 1968 avec le langage LOGO.

Ï Il est disponible dans la grande majorité des langages de programmationqui offrent des facultés graphiques.

Ï En particulier dans Python 3, avec le module turtle.

from turtle import * script

Ï Un fichier optionnel turtle.cfg placé dans le répertoire de travailpermet de configurer le monde de la tortue.

Ï Ne nommez pas votre fichier turtle.py !

Ï Placer en dernière ligne du fichier l’instruction mainloop().

5/54

Page 21: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Tortue vs Python Partie ii. Du graphisme en programmation

Ï Le graphisme de la tortue a été inventé au Laboratoire d’IntelligenceArtificielle du MIT vers 1968 avec le langage LOGO.

Ï Il est disponible dans la grande majorité des langages de programmationqui offrent des facultés graphiques.

Ï En particulier dans Python 3, avec le module turtle.

from turtle import * script

Ï Un fichier optionnel turtle.cfg placé dans le répertoire de travailpermet de configurer le monde de la tortue.

Ï Ne nommez pas votre fichier turtle.py !

Ï Placer en dernière ligne du fichier l’instruction mainloop().

5/54

Page 22: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Tortue vs Python Partie ii. Du graphisme en programmation

Ï Le graphisme de la tortue a été inventé au Laboratoire d’IntelligenceArtificielle du MIT vers 1968 avec le langage LOGO.

Ï Il est disponible dans la grande majorité des langages de programmationqui offrent des facultés graphiques.

Ï En particulier dans Python 3, avec le module turtle.

from turtle import * script

Ï Un fichier optionnel turtle.cfg placé dans le répertoire de travailpermet de configurer le monde de la tortue.

Ï Ne nommez pas votre fichier turtle.py !

Ï Placer en dernière ligne du fichier l’instruction mainloop().

5/54

Page 23: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Tortue vs Python Partie ii. Du graphisme en programmation

Ï Le graphisme de la tortue a été inventé au Laboratoire d’IntelligenceArtificielle du MIT vers 1968 avec le langage LOGO.

Ï Il est disponible dans la grande majorité des langages de programmationqui offrent des facultés graphiques.

Ï En particulier dans Python 3, avec le module turtle.

from turtle import * script

Ï Un fichier optionnel turtle.cfg placé dans le répertoire de travailpermet de configurer le monde de la tortue.

Ï Ne nommez pas votre fichier turtle.py !

Ï Placer en dernière ligne du fichier l’instruction mainloop().

5/54

Page 24: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Sommaire

f Partie i. Annonces

f Partie ii. Du graphisme en programmation

f Partie iii. Déplacements Absolus

f Partie iv. Déplacement relatif

f Partie v. Variables locales/globales

f Partie vi. Processing

f Partie vii. Faire des animations

f Partie viii. Gestion du clavier

f Partie ix. Table des matières6/54

Page 25: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Qu’est-ce qu’une tortue? Partie iii. Déplacements Absolus

Ï Une tortue est caractérisée par une position : abscisse et ordonnéeÏ pos() Ï goto(x,y)

Ï Une tortue est caractérisée par un cap (une direction) : un angle aÏ heading() Ï setheading(a)

Ï Une position de stylo (pen) : levé (up) ou baissé (down). Si le stylo estbaissé, la tortue laisse une trace en se déplaçant.

Ï down()Ï up()

Ï pencolor(c)Ï pensize(n)

Ï L’environnement naturelle d’une tortue est le canevas (le contenu de lafenêtre graphique).

Ï reset() Ï bgcolor()

7/54

Page 26: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Qu’est-ce qu’une tortue? Partie iii. Déplacements Absolus

Ï Une tortue est caractérisée par une position : abscisse et ordonnéeÏ pos() Ï goto(x,y)

Ï Une tortue est caractérisée par un cap (une direction) : un angle aÏ heading() Ï setheading(a)

Ï Une position de stylo (pen) : levé (up) ou baissé (down). Si le stylo estbaissé, la tortue laisse une trace en se déplaçant.

Ï down()Ï up()

Ï pencolor(c)Ï pensize(n)

Ï L’environnement naturelle d’une tortue est le canevas (le contenu de lafenêtre graphique).

Ï reset() Ï bgcolor()

7/54

Page 27: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Qu’est-ce qu’une tortue? Partie iii. Déplacements Absolus

Ï Une tortue est caractérisée par une position : abscisse et ordonnéeÏ pos() Ï goto(x,y)

Ï Une tortue est caractérisée par un cap (une direction) : un angle aÏ heading() Ï setheading(a)

Ï Une position de stylo (pen) : levé (up) ou baissé (down). Si le stylo estbaissé, la tortue laisse une trace en se déplaçant.

Ï down()Ï up()

Ï pencolor(c)Ï pensize(n)

Ï L’environnement naturelle d’une tortue est le canevas (le contenu de lafenêtre graphique).

Ï reset() Ï bgcolor()

7/54

Page 28: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Qu’est-ce qu’une tortue? Partie iii. Déplacements Absolus

Ï Une tortue est caractérisée par une position : abscisse et ordonnéeÏ pos() Ï goto(x,y)

Ï Une tortue est caractérisée par un cap (une direction) : un angle aÏ heading() Ï setheading(a)

Ï Une position de stylo (pen) : levé (up) ou baissé (down). Si le stylo estbaissé, la tortue laisse une trace en se déplaçant.

Ï down()Ï up()

Ï pencolor(c)Ï pensize(n)

Ï L’environnement naturelle d’une tortue est le canevas (le contenu de lafenêtre graphique).

Ï reset() Ï bgcolor()

7/54

Page 29: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Exemple Partie iii. Déplacements Absolus

def triangle_rect(a, b):up()goto(0, 0)down()goto(a, 0)goto(0, b)goto(0, 0)

bgcolor('yellow') # couleur de fondpencolor('red') # couleur du stylotriangle_rect(200,100) # on appelle la fonction

script

8/54

Page 30: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Exemple Partie iii. Déplacements Absolus

def triangle_rect(a, b):up()goto(0, 0)down()goto(a, 0)goto(0, b)goto(0, 0)

bgcolor('yellow') # couleur de fondpencolor('red') # couleur du stylotriangle_rect(200,100) # on appelle la fonction

script

8/54

Page 31: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Tracer une fonction Partie iii. Déplacements Absolus

# Traceurdef trace_fonction(f, xmin, xmax, dx):

(x,y) = (xmin,f(xmin))up() ; goto(x,y); down()while x < xmax:

(x,y) = (x+dx,f(x+dx))goto(x, y)

script

Ï On peut affecter deux variables à la fois (x,y)=(a,b)

import math

def sinusoïde(x):return 100*math.cos(x/10)

# On lance le scriptreset() # Effacement de canevas réinitialisationhideturtle() # Inutile d'afficher la tortuetracer(False) # On ne montre pas le tracertrace_fonction(sinusoïde,-200,200,1.0)

script

Ï Le fichier turtle.cfg, s’il existe, permet de configurer le canevas, laforme de la tortue, etc.

9/54

Page 32: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Tracer une fonction Partie iii. Déplacements Absolus

# Traceurdef trace_fonction(f, xmin, xmax, dx):

(x,y) = (xmin,f(xmin))up() ; goto(x,y); down()while x < xmax:

(x,y) = (x+dx,f(x+dx))goto(x, y)

script

Ï On peut affecter deux variables à la fois (x,y)=(a,b)

import math

def sinusoïde(x):return 100*math.cos(x/10)

# On lance le scriptreset() # Effacement de canevas réinitialisationhideturtle() # Inutile d'afficher la tortuetracer(False) # On ne montre pas le tracertrace_fonction(sinusoïde,-200,200,1.0)

script

Ï Le fichier turtle.cfg, s’il existe, permet de configurer le canevas, laforme de la tortue, etc.

9/54

Page 33: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Tracer une fonction Partie iii. Déplacements Absolus

# Traceurdef trace_fonction(f, xmin, xmax, dx):

(x,y) = (xmin,f(xmin))up() ; goto(x,y); down()while x < xmax:

(x,y) = (x+dx,f(x+dx))goto(x, y)

script

Ï On peut affecter deux variables à la fois (x,y)=(a,b)

import math

def sinusoïde(x):return 100*math.cos(x/10)

# On lance le scriptreset() # Effacement de canevas réinitialisationhideturtle() # Inutile d'afficher la tortuetracer(False) # On ne montre pas le tracertrace_fonction(sinusoïde,-200,200,1.0)

script

Ï Le fichier turtle.cfg, s’il existe, permet de configurer le canevas, laforme de la tortue, etc.

9/54

Page 34: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Tracer une fonction Partie iii. Déplacements Absolus

# Traceurdef trace_fonction(f, xmin, xmax, dx):

(x,y) = (xmin,f(xmin))up() ; goto(x,y); down()while x < xmax:

(x,y) = (x+dx,f(x+dx))goto(x, y)

script

Ï On peut affecter deux variables à la fois (x,y)=(a,b)

import math

def sinusoïde(x):return 100*math.cos(x/10)

# On lance le scriptreset() # Effacement de canevas réinitialisationhideturtle() # Inutile d'afficher la tortuetracer(False) # On ne montre pas le tracertrace_fonction(sinusoïde,-200,200,1.0)

script

Ï Le fichier turtle.cfg, s’il existe, permet de configurer le canevas, laforme de la tortue, etc.

9/54

Page 35: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Les tuples, un type composé Partie iii. Déplacements Absolus

Ï Vous avez noté la présence de tuples (uplets en français), .Ï ici un couple (x,y) : un 2-upletÏ Un triplet (ou 3-uplet) se noterait (x,y,z), etc.

Ï Les composantes d’un tuple p se notent p[0], p[1], p[2], …

Ï Le résultat de la fonction pos() est un couple.

>>> p=pos()>>> p(25.0, 10.0)>>> p[0]25.0>>> p[1]10.0

shell

Ï Affectation de tuples : simple et efficace

>>> (x,y)=(1,2)>>> (x,y)=(y,x) # Ça marche !>>> (x,y)(2, 1)

shell

10/54

Page 36: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Les tuples, un type composé Partie iii. Déplacements Absolus

Ï Vous avez noté la présence de tuples (uplets en français), .Ï ici un couple (x,y) : un 2-upletÏ Un triplet (ou 3-uplet) se noterait (x,y,z), etc.

Ï Les composantes d’un tuple p se notent p[0], p[1], p[2], …

Ï Le résultat de la fonction pos() est un couple.

>>> p=pos()>>> p(25.0, 10.0)>>> p[0]25.0>>> p[1]10.0

shell

Ï Affectation de tuples : simple et efficace

>>> (x,y)=(1,2)>>> (x,y)=(y,x) # Ça marche !>>> (x,y)(2, 1)

shell

10/54

Page 37: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Les tuples, un type composé Partie iii. Déplacements Absolus

Ï Vous avez noté la présence de tuples (uplets en français), .Ï ici un couple (x,y) : un 2-upletÏ Un triplet (ou 3-uplet) se noterait (x,y,z), etc.

Ï Les composantes d’un tuple p se notent p[0], p[1], p[2], …

Ï Le résultat de la fonction pos() est un couple.

>>>

p=pos()>>> p(25.0, 10.0)>>> p[0]25.0>>> p[1]10.0

shell

Ï Affectation de tuples : simple et efficace

>>> (x,y)=(1,2)>>> (x,y)=(y,x) # Ça marche !>>> (x,y)(2, 1)

shell

10/54

Page 38: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Les tuples, un type composé Partie iii. Déplacements Absolus

Ï Vous avez noté la présence de tuples (uplets en français), .Ï ici un couple (x,y) : un 2-upletÏ Un triplet (ou 3-uplet) se noterait (x,y,z), etc.

Ï Les composantes d’un tuple p se notent p[0], p[1], p[2], …

Ï Le résultat de la fonction pos() est un couple.

>>> p=pos()

>>> p(25.0, 10.0)>>> p[0]25.0>>> p[1]10.0

shell

Ï Affectation de tuples : simple et efficace

>>> (x,y)=(1,2)>>> (x,y)=(y,x) # Ça marche !>>> (x,y)(2, 1)

shell

10/54

Page 39: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Les tuples, un type composé Partie iii. Déplacements Absolus

Ï Vous avez noté la présence de tuples (uplets en français), .Ï ici un couple (x,y) : un 2-upletÏ Un triplet (ou 3-uplet) se noterait (x,y,z), etc.

Ï Les composantes d’un tuple p se notent p[0], p[1], p[2], …

Ï Le résultat de la fonction pos() est un couple.

>>> p=pos()>>>

p(25.0, 10.0)>>> p[0]25.0>>> p[1]10.0

shell

Ï Affectation de tuples : simple et efficace

>>> (x,y)=(1,2)>>> (x,y)=(y,x) # Ça marche !>>> (x,y)(2, 1)

shell

10/54

Page 40: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Les tuples, un type composé Partie iii. Déplacements Absolus

Ï Vous avez noté la présence de tuples (uplets en français), .Ï ici un couple (x,y) : un 2-upletÏ Un triplet (ou 3-uplet) se noterait (x,y,z), etc.

Ï Les composantes d’un tuple p se notent p[0], p[1], p[2], …

Ï Le résultat de la fonction pos() est un couple.

>>> p=pos()>>> p

(25.0, 10.0)>>> p[0]25.0>>> p[1]10.0

shell

Ï Affectation de tuples : simple et efficace

>>> (x,y)=(1,2)>>> (x,y)=(y,x) # Ça marche !>>> (x,y)(2, 1)

shell

10/54

Page 41: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Les tuples, un type composé Partie iii. Déplacements Absolus

Ï Vous avez noté la présence de tuples (uplets en français), .Ï ici un couple (x,y) : un 2-upletÏ Un triplet (ou 3-uplet) se noterait (x,y,z), etc.

Ï Les composantes d’un tuple p se notent p[0], p[1], p[2], …

Ï Le résultat de la fonction pos() est un couple.

>>> p=pos()>>> p(25.0, 10.0)>>>

p[0]25.0>>> p[1]10.0

shell

Ï Affectation de tuples : simple et efficace

>>> (x,y)=(1,2)>>> (x,y)=(y,x) # Ça marche !>>> (x,y)(2, 1)

shell

10/54

Page 42: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Les tuples, un type composé Partie iii. Déplacements Absolus

Ï Vous avez noté la présence de tuples (uplets en français), .Ï ici un couple (x,y) : un 2-upletÏ Un triplet (ou 3-uplet) se noterait (x,y,z), etc.

Ï Les composantes d’un tuple p se notent p[0], p[1], p[2], …

Ï Le résultat de la fonction pos() est un couple.

>>> p=pos()>>> p(25.0, 10.0)>>> p[0]

25.0>>> p[1]10.0

shell

Ï Affectation de tuples : simple et efficace

>>> (x,y)=(1,2)>>> (x,y)=(y,x) # Ça marche !>>> (x,y)(2, 1)

shell

10/54

Page 43: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Les tuples, un type composé Partie iii. Déplacements Absolus

Ï Vous avez noté la présence de tuples (uplets en français), .Ï ici un couple (x,y) : un 2-upletÏ Un triplet (ou 3-uplet) se noterait (x,y,z), etc.

Ï Les composantes d’un tuple p se notent p[0], p[1], p[2], …

Ï Le résultat de la fonction pos() est un couple.

>>> p=pos()>>> p(25.0, 10.0)>>> p[0]25.0>>>

p[1]10.0

shell

Ï Affectation de tuples : simple et efficace

>>> (x,y)=(1,2)>>> (x,y)=(y,x) # Ça marche !>>> (x,y)(2, 1)

shell

10/54

Page 44: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Les tuples, un type composé Partie iii. Déplacements Absolus

Ï Vous avez noté la présence de tuples (uplets en français), .Ï ici un couple (x,y) : un 2-upletÏ Un triplet (ou 3-uplet) se noterait (x,y,z), etc.

Ï Les composantes d’un tuple p se notent p[0], p[1], p[2], …

Ï Le résultat de la fonction pos() est un couple.

>>> p=pos()>>> p(25.0, 10.0)>>> p[0]25.0>>> p[1]

10.0

shell

Ï Affectation de tuples : simple et efficace

>>> (x,y)=(1,2)>>> (x,y)=(y,x) # Ça marche !>>> (x,y)(2, 1)

shell

10/54

Page 45: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Les tuples, un type composé Partie iii. Déplacements Absolus

Ï Vous avez noté la présence de tuples (uplets en français), .Ï ici un couple (x,y) : un 2-upletÏ Un triplet (ou 3-uplet) se noterait (x,y,z), etc.

Ï Les composantes d’un tuple p se notent p[0], p[1], p[2], …

Ï Le résultat de la fonction pos() est un couple.

>>> p=pos()>>> p(25.0, 10.0)>>> p[0]25.0>>> p[1]10.0

shell

Ï Affectation de tuples : simple et efficace

>>>

(x,y)=(1,2)>>> (x,y)=(y,x) # Ça marche !>>> (x,y)(2, 1)

shell

10/54

Page 46: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Les tuples, un type composé Partie iii. Déplacements Absolus

Ï Vous avez noté la présence de tuples (uplets en français), .Ï ici un couple (x,y) : un 2-upletÏ Un triplet (ou 3-uplet) se noterait (x,y,z), etc.

Ï Les composantes d’un tuple p se notent p[0], p[1], p[2], …

Ï Le résultat de la fonction pos() est un couple.

>>> p=pos()>>> p(25.0, 10.0)>>> p[0]25.0>>> p[1]10.0

shell

Ï Affectation de tuples : simple et efficace

>>> (x,y)=(1,2)

>>> (x,y)=(y,x) # Ça marche !>>> (x,y)(2, 1)

shell

10/54

Page 47: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Les tuples, un type composé Partie iii. Déplacements Absolus

Ï Vous avez noté la présence de tuples (uplets en français), .Ï ici un couple (x,y) : un 2-upletÏ Un triplet (ou 3-uplet) se noterait (x,y,z), etc.

Ï Les composantes d’un tuple p se notent p[0], p[1], p[2], …

Ï Le résultat de la fonction pos() est un couple.

>>> p=pos()>>> p(25.0, 10.0)>>> p[0]25.0>>> p[1]10.0

shell

Ï Affectation de tuples : simple et efficace

>>> (x,y)=(1,2)>>>

(x,y)=(y,x) # Ça marche !>>> (x,y)(2, 1)

shell

10/54

Page 48: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Les tuples, un type composé Partie iii. Déplacements Absolus

Ï Vous avez noté la présence de tuples (uplets en français), .Ï ici un couple (x,y) : un 2-upletÏ Un triplet (ou 3-uplet) se noterait (x,y,z), etc.

Ï Les composantes d’un tuple p se notent p[0], p[1], p[2], …

Ï Le résultat de la fonction pos() est un couple.

>>> p=pos()>>> p(25.0, 10.0)>>> p[0]25.0>>> p[1]10.0

shell

Ï Affectation de tuples : simple et efficace

>>> (x,y)=(1,2)>>> (x,y)=(y,x) # Ça marche !

>>> (x,y)(2, 1)

shell

10/54

Page 49: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Les tuples, un type composé Partie iii. Déplacements Absolus

Ï Vous avez noté la présence de tuples (uplets en français), .Ï ici un couple (x,y) : un 2-upletÏ Un triplet (ou 3-uplet) se noterait (x,y,z), etc.

Ï Les composantes d’un tuple p se notent p[0], p[1], p[2], …

Ï Le résultat de la fonction pos() est un couple.

>>> p=pos()>>> p(25.0, 10.0)>>> p[0]25.0>>> p[1]10.0

shell

Ï Affectation de tuples : simple et efficace

>>> (x,y)=(1,2)>>> (x,y)=(y,x) # Ça marche !>>>

(x,y)(2, 1)

shell

10/54

Page 50: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Les tuples, un type composé Partie iii. Déplacements Absolus

Ï Vous avez noté la présence de tuples (uplets en français), .Ï ici un couple (x,y) : un 2-upletÏ Un triplet (ou 3-uplet) se noterait (x,y,z), etc.

Ï Les composantes d’un tuple p se notent p[0], p[1], p[2], …

Ï Le résultat de la fonction pos() est un couple.

>>> p=pos()>>> p(25.0, 10.0)>>> p[0]25.0>>> p[1]10.0

shell

Ï Affectation de tuples : simple et efficace

>>> (x,y)=(1,2)>>> (x,y)=(y,x) # Ça marche !>>> (x,y)

(2, 1)

shell

10/54

Page 51: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Les tuples, un type composé Partie iii. Déplacements Absolus

Ï Vous avez noté la présence de tuples (uplets en français), .Ï ici un couple (x,y) : un 2-upletÏ Un triplet (ou 3-uplet) se noterait (x,y,z), etc.

Ï Les composantes d’un tuple p se notent p[0], p[1], p[2], …

Ï Le résultat de la fonction pos() est un couple.

>>> p=pos()>>> p(25.0, 10.0)>>> p[0]25.0>>> p[1]10.0

shell

Ï Affectation de tuples : simple et efficace

>>> (x,y)=(1,2)>>> (x,y)=(y,x) # Ça marche !>>> (x,y)(2, 1)

shell

10/54

Page 52: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Courbes paramétriques Partie iii. Déplacements Absolus

Ï Un tortue qui se déplace forme une courbe.

Ï La position de la tortue dépend du temps (x(t),y(t)).

Ï Donner une formule pour x(t) et y(t) définie une courbe paramétrique.

def trace_parametrique(tmin,tmax,fx,fy,dt):""" Trace la courbe d'équation x=fx(t) y=fy(t)avec tmin<=t<tmax et un pas dt"""t=tmin(x,y)=(fx(t),fy(t))up() ; goto(x,y) ; down()while t<tmax:

(x,y) = (fx(t),fy(t))goto(x,y)t=t+dt

script

Ï La cinématique (étude du mouvement) s’intéresse à la trajectoire d’uncorps dont les coordonnées (x,y) sont fonction d’un paramètre t.

Ï Autrement dit : x = x(t) et y = y(t) pour t dans un certain intervalle I .

11/54

Page 53: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Courbes paramétriques Partie iii. Déplacements Absolus

Ï Un tortue qui se déplace forme une courbe.

Ï La position de la tortue dépend du temps (x(t),y(t)).

Ï Donner une formule pour x(t) et y(t) définie une courbe paramétrique.

def trace_parametrique(tmin,tmax,fx,fy,dt):""" Trace la courbe d'équation x=fx(t) y=fy(t)avec tmin<=t<tmax et un pas dt"""t=tmin(x,y)=(fx(t),fy(t))up() ; goto(x,y) ; down()while t<tmax:

(x,y) = (fx(t),fy(t))goto(x,y)t=t+dt

script

Ï La cinématique (étude du mouvement) s’intéresse à la trajectoire d’uncorps dont les coordonnées (x,y) sont fonction d’un paramètre t.

Ï Autrement dit : x = x(t) et y = y(t) pour t dans un certain intervalle I .

11/54

Page 54: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Courbes paramétriques Partie iii. Déplacements Absolus

Ï Un tortue qui se déplace forme une courbe.

Ï La position de la tortue dépend du temps (x(t),y(t)).

Ï Donner une formule pour x(t) et y(t) définie une courbe paramétrique.

def trace_parametrique(tmin,tmax,fx,fy,dt):""" Trace la courbe d'équation x=fx(t) y=fy(t)avec tmin<=t<tmax et un pas dt"""t=tmin(x,y)=(fx(t),fy(t))up() ; goto(x,y) ; down()while t<tmax:

(x,y) = (fx(t),fy(t))goto(x,y)t=t+dt

script

Ï La cinématique (étude du mouvement) s’intéresse à la trajectoire d’uncorps dont les coordonnées (x,y) sont fonction d’un paramètre t.

Ï Autrement dit : x = x(t) et y = y(t) pour t dans un certain intervalle I .

11/54

Page 55: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Courbes paramétriques Partie iii. Déplacements Absolus

Ï Un tortue qui se déplace forme une courbe.

Ï La position de la tortue dépend du temps (x(t),y(t)).

Ï Donner une formule pour x(t) et y(t) définie une courbe paramétrique.

def trace_parametrique(tmin,tmax,fx,fy,dt):""" Trace la courbe d'équation x=fx(t) y=fy(t)avec tmin<=t<tmax et un pas dt"""t=tmin(x,y)=(fx(t),fy(t))up() ; goto(x,y) ; down()while t<tmax:

(x,y) = (fx(t),fy(t))goto(x,y)t=t+dt

script

Ï La cinématique (étude du mouvement) s’intéresse à la trajectoire d’uncorps dont les coordonnées (x,y) sont fonction d’un paramètre t.

Ï Autrement dit : x = x(t) et y = y(t) pour t dans un certain intervalle I .

11/54

Page 56: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Courbes paramétriques Partie iii. Déplacements Absolus

Ï Un tortue qui se déplace forme une courbe.

Ï La position de la tortue dépend du temps (x(t),y(t)).

Ï Donner une formule pour x(t) et y(t) définie une courbe paramétrique.

def trace_parametrique(tmin,tmax,fx,fy,dt):""" Trace la courbe d'équation x=fx(t) y=fy(t)avec tmin<=t<tmax et un pas dt"""t=tmin(x,y)=(fx(t),fy(t))up() ; goto(x,y) ; down()while t<tmax:

(x,y) = (fx(t),fy(t))goto(x,y)t=t+dt

script

Ï La cinématique (étude du mouvement) s’intéresse à la trajectoire d’uncorps dont les coordonnées (x,y) sont fonction d’un paramètre t.

Ï Autrement dit : x = x(t) et y = y(t) pour t dans un certain intervalle I .

11/54

Page 57: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Courbes paramétriques Partie iii. Déplacements Absolus

Ï Un tortue qui se déplace forme une courbe.

Ï La position de la tortue dépend du temps (x(t),y(t)).

Ï Donner une formule pour x(t) et y(t) définie une courbe paramétrique.

def trace_parametrique(tmin,tmax,fx,fy,dt):""" Trace la courbe d'équation x=fx(t) y=fy(t)avec tmin<=t<tmax et un pas dt"""t=tmin(x,y)=(fx(t),fy(t))up() ; goto(x,y) ; down()while t<tmax:

(x,y) = (fx(t),fy(t))goto(x,y)t=t+dt

script

Ï La cinématique (étude du mouvement) s’intéresse à la trajectoire d’uncorps dont les coordonnées (x,y) sont fonction d’un paramètre t.

Ï Autrement dit : x = x(t) et y = y(t) pour t dans un certain intervalle I .

11/54

Page 58: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Exemples Partie iii. Déplacements Absolus

Ï Exemple 1 : y = f (x) est équivalent à x(t) = t et y(t) = f (t)

Ï Exemple 2 : pour t ∈ [0,2π[, le cercle de centre A(a,b) et de rayon r estdonné par les équations décrivant un point du cercle M(x,y) :

{x(t) = a+ r cos(t),

y(t) = b+ r sin(t).

Ï Exemple 3 : Soit un segment [A,B] d’extrémité A(xa,ya) et B(xb,yb)

{x(t) = t ·xa + (1− t)xb,

y(t) = t ·ya + (1− t)yb,

On a alors −−−→MA2 = t−−−→A1A2

12/54

Page 59: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Exemples Partie iii. Déplacements Absolus

Ï Exemple 1 : y = f (x) est équivalent à x(t) = t et y(t) = f (t)

Ï Exemple 2 : pour t ∈ [0,2π[, le cercle de centre A(a,b) et de rayon r estdonné par les équations décrivant un point du cercle M(x,y) :

{x(t) = a+ r cos(t),

y(t) = b+ r sin(t).

Ï Exemple 3 : Soit un segment [A,B] d’extrémité A(xa,ya) et B(xb,yb)

{x(t) = t ·xa + (1− t)xb,

y(t) = t ·ya + (1− t)yb,

On a alors −−−→MA2 = t−−−→A1A2

12/54

Page 60: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Exemples Partie iii. Déplacements Absolus

Ï Exemple 1 : y = f (x) est équivalent à x(t) = t et y(t) = f (t)

Ï Exemple 2 : pour t ∈ [0,2π[, le cercle de centre A(a,b) et de rayon r estdonné par les équations décrivant un point du cercle M(x,y) :{

x(t) = a+ r cos(t),

y(t) = b+ r sin(t).

Ï Exemple 3 : Soit un segment [A,B] d’extrémité A(xa,ya) et B(xb,yb)

{x(t) = t ·xa + (1− t)xb,

y(t) = t ·ya + (1− t)yb,

On a alors −−−→MA2 = t−−−→A1A2

12/54

Page 61: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Exemples Partie iii. Déplacements Absolus

Ï Exemple 1 : y = f (x) est équivalent à x(t) = t et y(t) = f (t)

Ï Exemple 2 : pour t ∈ [0,2π[, le cercle de centre A(a,b) et de rayon r estdonné par les équations décrivant un point du cercle M(x,y) :{

x(t) = a+ r cos(t),

y(t) = b+ r sin(t).

Ï Exemple 3 : Soit un segment [A,B] d’extrémité A(xa,ya) et B(xb,yb)

{x(t) = t ·xa + (1− t)xb,

y(t) = t ·ya + (1− t)yb,

On a alors −−−→MA2 = t−−−→A1A2

12/54

Page 62: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Exemples Partie iii. Déplacements Absolus

Ï Exemple 1 : y = f (x) est équivalent à x(t) = t et y(t) = f (t)

Ï Exemple 2 : pour t ∈ [0,2π[, le cercle de centre A(a,b) et de rayon r estdonné par les équations décrivant un point du cercle M(x,y) :{

x(t) = a+ r cos(t),

y(t) = b+ r sin(t).

Ï Exemple 3 : Soit un segment [A,B] d’extrémité A(xa,ya) et B(xb,yb){x(t) = t ·xa + (1− t)xb,

y(t) = t ·ya + (1− t)yb,

On a alors −−−→MA2 = t−−−→A1A2

12/54

Page 63: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Traçons un cercle Partie iii. Déplacements Absolus

Ï Tortue parcourant un cercle de centre O et de rayon 200.

Ï Le caractère continu du mouvement est une illusion d’optique.

Ï Le paramètre t (le temps) avance par pas de dt

Ï Un cercle est équivalent (à l’œil nu) à une polygone à beaucoup de côté.

Ï 40 = Beaucoup. Donc on prend

dt = Périmètre40

= 2×π

40≈ 0,16 radian

def anim_cercle(r):dt = 2 * pi / 40t = 0 ; (x,y)=(r,0) # départup() ; goto(x,y) ; down() # On se déplace en M0while t < 6 * pi: # 3 tours (3*2π)

ts = t + dtxs = r * cos(ts) ; ys = r * sin(ts)goto(xs,ys)t = ts

script

13/54

Page 64: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Traçons un cercle Partie iii. Déplacements Absolus

Ï Tortue parcourant un cercle de centre O et de rayon 200.

Ï Le caractère continu du mouvement est une illusion d’optique.

Ï Le paramètre t (le temps) avance par pas de dt

Ï Un cercle est équivalent (à l’œil nu) à une polygone à beaucoup de côté.

Ï 40 = Beaucoup. Donc on prend

dt = Périmètre40

= 2×π

40≈ 0,16 radian

def anim_cercle(r):dt = 2 * pi / 40t = 0 ; (x,y)=(r,0) # départup() ; goto(x,y) ; down() # On se déplace en M0while t < 6 * pi: # 3 tours (3*2π)

ts = t + dtxs = r * cos(ts) ; ys = r * sin(ts)goto(xs,ys)t = ts

script

13/54

Page 65: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Traçons un cercle Partie iii. Déplacements Absolus

Ï Tortue parcourant un cercle de centre O et de rayon 200.

Ï Le caractère continu du mouvement est une illusion d’optique.

Ï Le paramètre t (le temps) avance par pas de dt

Ï Un cercle est équivalent (à l’œil nu) à une polygone à beaucoup de côté.

Ï 40 = Beaucoup. Donc on prend

dt = Périmètre40

= 2×π

40≈ 0,16 radian

def anim_cercle(r):dt = 2 * pi / 40t = 0 ; (x,y)=(r,0) # départup() ; goto(x,y) ; down() # On se déplace en M0while t < 6 * pi: # 3 tours (3*2π)

ts = t + dtxs = r * cos(ts) ; ys = r * sin(ts)goto(xs,ys)t = ts

script

13/54

Page 66: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Traçons un cercle Partie iii. Déplacements Absolus

Ï Tortue parcourant un cercle de centre O et de rayon 200.

Ï Le caractère continu du mouvement est une illusion d’optique.

Ï Le paramètre t (le temps) avance par pas de dt

Ï Un cercle est équivalent (à l’œil nu) à une polygone à beaucoup de côté.

Ï 40 = Beaucoup. Donc on prend

dt = Périmètre40

= 2×π

40≈ 0,16 radian

def anim_cercle(r):dt = 2 * pi / 40t = 0 ; (x,y)=(r,0) # départup() ; goto(x,y) ; down() # On se déplace en M0while t < 6 * pi: # 3 tours (3*2π)

ts = t + dtxs = r * cos(ts) ; ys = r * sin(ts)goto(xs,ys)t = ts

script

13/54

Page 67: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Traçons un cercle Partie iii. Déplacements Absolus

Ï Tortue parcourant un cercle de centre O et de rayon 200.

Ï Le caractère continu du mouvement est une illusion d’optique.

Ï Le paramètre t (le temps) avance par pas de dt

Ï Un cercle est équivalent (à l’œil nu) à une polygone à beaucoup de côté.

Ï 40 = Beaucoup.

Donc on prend

dt = Périmètre40

= 2×π

40≈ 0,16 radian

def anim_cercle(r):dt = 2 * pi / 40t = 0 ; (x,y)=(r,0) # départup() ; goto(x,y) ; down() # On se déplace en M0while t < 6 * pi: # 3 tours (3*2π)

ts = t + dtxs = r * cos(ts) ; ys = r * sin(ts)goto(xs,ys)t = ts

script

13/54

Page 68: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Traçons un cercle Partie iii. Déplacements Absolus

Ï Tortue parcourant un cercle de centre O et de rayon 200.

Ï Le caractère continu du mouvement est une illusion d’optique.

Ï Le paramètre t (le temps) avance par pas de dt

Ï Un cercle est équivalent (à l’œil nu) à une polygone à beaucoup de côté.

Ï 40 = Beaucoup. Donc on prend

dt = Périmètre40

= 2×π

40≈ 0,16 radian

def anim_cercle(r):dt = 2 * pi / 40t = 0 ; (x,y)=(r,0) # départup() ; goto(x,y) ; down() # On se déplace en M0while t < 6 * pi: # 3 tours (3*2π)

ts = t + dtxs = r * cos(ts) ; ys = r * sin(ts)goto(xs,ys)t = ts

script

13/54

Page 69: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Traçons un cercle Partie iii. Déplacements Absolus

Ï Tortue parcourant un cercle de centre O et de rayon 200.

Ï Le caractère continu du mouvement est une illusion d’optique.

Ï Le paramètre t (le temps) avance par pas de dt

Ï Un cercle est équivalent (à l’œil nu) à une polygone à beaucoup de côté.

Ï 40 = Beaucoup. Donc on prend

dt = Périmètre40

= 2×π

40≈ 0,16 radian

def anim_cercle(r):dt = 2 * pi / 40t = 0 ; (x,y)=(r,0) # départup() ; goto(x,y) ; down() # On se déplace en M0while t < 6 * pi: # 3 tours (3*2π)

ts = t + dtxs = r * cos(ts) ; ys = r * sin(ts)goto(xs,ys)t = ts

script

13/54

Page 70: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Ou plus simplement Partie iii. Déplacements Absolus

from math import *from turtle import *

def anim_cercle(r):dt = 2 * pi / 40t = 0 ; (x,y) = (r, 0) # départup() ; goto(x,y) ; down() # en M0while t < 6 * pi: # 3 tours

ts = t + dtxs = r * cos(ts) ; ys = r * sin(ts)goto(xs,ys)t = ts

def X(t):return 200+200*cos(t)

def Y(t):return 200*sin(t)

tracer(True) # montrer les étapesshowturtle() # montrer où se situe la tortue/stylo

dt = 2*pi/40trace_parametrique(0,2*pi+dt,X,Y,dt) #2π+dt fermer le cercleanim_cercle(200)

script

14/54

Page 71: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Sommaire

f Partie i. Annonces

f Partie ii. Du graphisme en programmation

f Partie iii. Déplacements Absolus

f Partie iv. Déplacement relatif

f Partie v. Variables locales/globales

f Partie vi. Processing

f Partie vii. Faire des animations

f Partie viii. Gestion du clavier

f Partie ix. Table des matières15/54

Page 72: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Les déplacements relatifs Partie iv. Déplacement relatif

Ï Jusqu’alors on se déplaçait en direction de coordonnées absolues.

Ï Historiquement notre tortue n’utilise que des dépacements relatifs.

Ï Elle peut avancer, reculer, se trouver vers la droite la gauche.

Changement de capÏ left(a)Ï right(a)Ï towards(p)

Changement de positionÏ forward(d)Ï back(d)

Ï Remarque left(a)⇔right(-a) et forward(a)⇔back(-a)

Ï Une suite d’appels aux fonctions left et forward permet donc dedécrire une courbe connexe (d’un seul tenant).

Ï En levant le crayon, on peut donc tracer plusieurs courbes non reliéesentre elles (connexes par arcs).

16/54

Page 73: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Les déplacements relatifs Partie iv. Déplacement relatif

Ï Jusqu’alors on se déplaçait en direction de coordonnées absolues.

Ï Historiquement notre tortue n’utilise que des dépacements relatifs.

Ï Elle peut avancer, reculer, se trouver vers la droite la gauche.

Changement de capÏ left(a)Ï right(a)Ï towards(p)

Changement de positionÏ forward(d)Ï back(d)

Ï Remarque left(a)⇔right(-a) et forward(a)⇔back(-a)

Ï Une suite d’appels aux fonctions left et forward permet donc dedécrire une courbe connexe (d’un seul tenant).

Ï En levant le crayon, on peut donc tracer plusieurs courbes non reliéesentre elles (connexes par arcs).

16/54

Page 74: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Les déplacements relatifs Partie iv. Déplacement relatif

Ï Jusqu’alors on se déplaçait en direction de coordonnées absolues.

Ï Historiquement notre tortue n’utilise que des dépacements relatifs.

Ï Elle peut avancer, reculer, se trouver vers la droite la gauche.

Changement de capÏ left(a)Ï right(a)Ï towards(p)

Changement de positionÏ forward(d)Ï back(d)

Ï Remarque left(a)⇔right(-a) et forward(a)⇔back(-a)

Ï Une suite d’appels aux fonctions left et forward permet donc dedécrire une courbe connexe (d’un seul tenant).

Ï En levant le crayon, on peut donc tracer plusieurs courbes non reliéesentre elles (connexes par arcs).

16/54

Page 75: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Les déplacements relatifs Partie iv. Déplacement relatif

Ï Jusqu’alors on se déplaçait en direction de coordonnées absolues.

Ï Historiquement notre tortue n’utilise que des dépacements relatifs.

Ï Elle peut avancer, reculer, se trouver vers la droite la gauche.

Changement de capÏ left(a)Ï right(a)Ï towards(p)

Changement de positionÏ forward(d)Ï back(d)

Ï Remarque left(a)⇔right(-a) et forward(a)⇔back(-a)

Ï Une suite d’appels aux fonctions left et forward permet donc dedécrire une courbe connexe (d’un seul tenant).

Ï En levant le crayon, on peut donc tracer plusieurs courbes non reliéesentre elles (connexes par arcs).

16/54

Page 76: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Les déplacements relatifs Partie iv. Déplacement relatif

Ï Jusqu’alors on se déplaçait en direction de coordonnées absolues.

Ï Historiquement notre tortue n’utilise que des dépacements relatifs.

Ï Elle peut avancer, reculer, se trouver vers la droite la gauche.

Changement de capÏ left(a)Ï right(a)Ï towards(p)

Changement de positionÏ forward(d)Ï back(d)

Ï Remarque left(a)⇔right(-a) et forward(a)⇔back(-a)

Ï Une suite d’appels aux fonctions left et forward permet donc dedécrire une courbe connexe (d’un seul tenant).

Ï En levant le crayon, on peut donc tracer plusieurs courbes non reliéesentre elles (connexes par arcs).

16/54

Page 77: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Les déplacements relatifs Partie iv. Déplacement relatif

Ï Jusqu’alors on se déplaçait en direction de coordonnées absolues.

Ï Historiquement notre tortue n’utilise que des dépacements relatifs.

Ï Elle peut avancer, reculer, se trouver vers la droite la gauche.

Changement de capÏ left(a)Ï right(a)Ï towards(p)

Changement de positionÏ forward(d)Ï back(d)

Ï Remarque left(a)⇔right(-a) et forward(a)⇔back(-a)

Ï Une suite d’appels aux fonctions left et forward permet donc dedécrire une courbe connexe (d’un seul tenant).

Ï En levant le crayon, on peut donc tracer plusieurs courbes non reliéesentre elles (connexes par arcs).

16/54

Page 78: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Les déplacements relatifs Partie iv. Déplacement relatif

Ï Jusqu’alors on se déplaçait en direction de coordonnées absolues.

Ï Historiquement notre tortue n’utilise que des dépacements relatifs.

Ï Elle peut avancer, reculer, se trouver vers la droite la gauche.

Changement de capÏ left(a)Ï right(a)Ï towards(p)

Changement de positionÏ forward(d)Ï back(d)

Ï Remarque left(a)⇔right(-a) et forward(a)⇔back(-a)

Ï Une suite d’appels aux fonctions left et forward permet donc dedécrire une courbe connexe (d’un seul tenant).

Ï En levant le crayon, on peut donc tracer plusieurs courbes non reliéesentre elles (connexes par arcs).

16/54

Page 79: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Les déplacements relatifs Partie iv. Déplacement relatif

Ï Jusqu’alors on se déplaçait en direction de coordonnées absolues.

Ï Historiquement notre tortue n’utilise que des dépacements relatifs.

Ï Elle peut avancer, reculer, se trouver vers la droite la gauche.

Changement de capÏ left(a)Ï right(a)Ï towards(p)

Changement de positionÏ forward(d)Ï back(d)

Ï Remarque left(a)⇔right(-a) et forward(a)⇔back(-a)

Ï Une suite d’appels aux fonctions left et forward permet donc dedécrire une courbe connexe (d’un seul tenant).

Ï En levant le crayon, on peut donc tracer plusieurs courbes non reliéesentre elles (connexes par arcs).

16/54

Page 80: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Carré et autres polygones Partie iv. Déplacement relatif

Ï Dessin d’un carré de côté c.

def carre(c):i=0while i<4:

forward(c)left(90)

i=i+1

script

>>> carre(100)

shell

Ï Dessin d’un polygone de côté c

def polygone(n, c):a = 360.0 / nfor i in range(n):

forward(c)left(a)

script

>>> polygone(8,100)

shell

17/54

Page 81: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Carré et autres polygones Partie iv. Déplacement relatif

Ï Dessin d’un carré de côté c.

def carre(c):i=0while i<4:

forward(c)left(90)

i=i+1

script

>>>

carre(100)

shell

Ï Dessin d’un polygone de côté c

def polygone(n, c):a = 360.0 / nfor i in range(n):

forward(c)left(a)

script

>>> polygone(8,100)

shell

17/54

Page 82: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Carré et autres polygones Partie iv. Déplacement relatif

Ï Dessin d’un carré de côté c.

def carre(c):i=0while i<4:

forward(c)left(90)

i=i+1

script

>>> carre(100) shell

Ï Dessin d’un polygone de côté c

def polygone(n, c):a = 360.0 / nfor i in range(n):

forward(c)left(a)

script

>>> polygone(8,100)

shell

17/54

Page 83: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Carré et autres polygones Partie iv. Déplacement relatif

Ï Dessin d’un carré de côté c.

def carre(c):i=0while i<4:

forward(c)left(90)

i=i+1

script

>>> carre(100) shell

Ï Dessin d’un polygone de côté c

def polygone(n, c):a = 360.0 / nfor i in range(n):

forward(c)left(a)

script

>>> polygone(8,100)

shell

17/54

Page 84: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Carré et autres polygones Partie iv. Déplacement relatif

Ï Dessin d’un carré de côté c.

def carre(c):i=0while i<4:

forward(c)left(90)

i=i+1

script

>>> carre(100) shell

Ï Dessin d’un polygone de côté c

def polygone(n, c):a = 360.0 / nfor i in range(n):

forward(c)left(a)

script

>>> polygone(8,100)

shell

17/54

Page 85: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Carré et autres polygones Partie iv. Déplacement relatif

Ï Dessin d’un carré de côté c.

def carre(c):i=0while i<4:

forward(c)left(90)

i=i+1

script

>>> carre(100) shell

Ï Dessin d’un polygone de côté c

def polygone(n, c):a = 360.0 / nfor i in range(n):

forward(c)left(a)

script

>>>

polygone(8,100)

shell

17/54

Page 86: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Carré et autres polygones Partie iv. Déplacement relatif

Ï Dessin d’un carré de côté c.

def carre(c):i=0while i<4:

forward(c)left(90)

i=i+1

script

>>> carre(100) shell

Ï Dessin d’un polygone de côté c

def polygone(n, c):a = 360.0 / nfor i in range(n):

forward(c)left(a)

script

>>> polygone(8,100) shell

17/54

Page 87: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

La courbe fractale de Koch Partie iv. Déplacement relatif

La suite (Kn) des courbes de Koch de base T est construite de proche enproche (par récurrence).

Ï K0 est un segment de longueur T .

Ï K1 est obtenue par chirurgie à partir de K0.

Ï K2 est obtenue par la même chirurgie appliquéeà chaque côté de K1.

Ï K3 est obtenue par la même chirurgie appliquéeà chaque côté de K2.

Ï À chaque étape, tout les segments ont la même longueur.

18/54

Page 88: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

La courbe fractale de Koch Partie iv. Déplacement relatif

La suite (Kn) des courbes de Koch de base T est construite de proche enproche (par récurrence).

Ï K0 est un segment de longueur T .

Ï K1 est obtenue par chirurgie à partir de K0.

Ï K2 est obtenue par la même chirurgie appliquéeà chaque côté de K1.

Ï K3 est obtenue par la même chirurgie appliquéeà chaque côté de K2.

Ï À chaque étape, tout les segments ont la même longueur.

18/54

Page 89: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

La courbe fractale de Koch Partie iv. Déplacement relatif

La suite (Kn) des courbes de Koch de base T est construite de proche enproche (par récurrence).

Ï K0 est un segment de longueur T .

Ï K1 est obtenue par chirurgie à partir de K0.

Ï K2 est obtenue par la même chirurgie appliquéeà chaque côté de K1.

Ï K3 est obtenue par la même chirurgie appliquéeà chaque côté de K2.

Ï À chaque étape, tout les segments ont la même longueur.

18/54

Page 90: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

La courbe fractale de Koch Partie iv. Déplacement relatif

La suite (Kn) des courbes de Koch de base T est construite de proche enproche (par récurrence).

Ï K0 est un segment de longueur T .

Ï K1 est obtenue par chirurgie à partir de K0.

Ï K2 est obtenue par la même chirurgie appliquéeà chaque côté de K1.

Ï K3 est obtenue par la même chirurgie appliquéeà chaque côté de K2.

Ï À chaque étape, tout les segments ont la même longueur.

18/54

Page 91: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

La courbe fractale de Koch Partie iv. Déplacement relatif

La suite (Kn) des courbes de Koch de base T est construite de proche enproche (par récurrence).

Ï K0 est un segment de longueur T .

Ï K1 est obtenue par chirurgie à partir de K0.

Ï K2 est obtenue par la même chirurgie appliquéeà chaque côté de K1.

Ï K3 est obtenue par la même chirurgie appliquéeà chaque côté de K2.

Ï À chaque étape, tout les segments ont la même longueur.

18/54

Page 92: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

La courbe fractale de Koch Partie iv. Déplacement relatif

La suite (Kn) des courbes de Koch de base T est construite de proche enproche (par récurrence).

Ï K0 est un segment de longueur T .

Ï K1 est obtenue par chirurgie à partir de K0.

Ï K2 est obtenue par la même chirurgie appliquéeà chaque côté de K1.

Ï K3 est obtenue par la même chirurgie appliquéeà chaque côté de K2.

Ï À chaque étape, tout les segments ont la même longueur.

18/54

Page 93: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Fractale en Python Partie iv. Déplacement relatif

Ï Mathématiquement, la courbe Kn s’obtient comme assemblage de quatrecourbes Kn−1. On peut donc la dessiner par récurrence sur n.def koch(n, T):

""" approximant de la courbede Koch de niveau n et debase T """if n == 0:

forward(T)else:

koch(n - 1, T / 3)left(60)koch(n - 1, T / 3)right(120)koch(n - 1, T / 3)left(60)koch(n - 1, T / 3)

script

Ï La courbe de Koch K est la limite des courbes Kn quand n →∞.

Ï Découverte en 1904 par le mathématicien suédois Helge von Koch. Lacourbe K est fractale, continue, mais sans tangente en aucun point.

19/54

Page 94: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

La fractale ultime Partie iv. Déplacement relatif

L'approximant de niveau 6

L'antifloconLe flocon de Von Koch

20/54

Page 95: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Sommaire

f Partie i. Annonces

f Partie ii. Du graphisme en programmation

f Partie iii. Déplacements Absolus

f Partie iv. Déplacement relatif

f Partie v. Variables locales/globales

f Partie vi. Processing

f Partie vii. Faire des animations

f Partie viii. Gestion du clavier

f Partie ix. Table des matières21/54

Page 96: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Variables locales Partie v. Variables locales/globales

Ï On appelle variable localeÏ une variable définie dans le corps d’une fonction.Ï une variable définie comme argument d’une fonction

Ï Les noms n’ont pas d’importance.

def boucle(n):j=0while j<n:

print(j,end='')j=j+1

script

⇔def boucle(fin):

k=0while k<fin:

print(k,end='')k=k+1

script

Ï N’est utilisable que localement.

>>> j=17>>> boucle(3)012>>> j17

shell

22/54

Page 97: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Variables locales Partie v. Variables locales/globales

Ï On appelle variable localeÏ une variable définie dans le corps d’une fonction.Ï une variable définie comme argument d’une fonction

Ï Les noms n’ont pas d’importance.def boucle(n):

j=0while j<n:

print(j,end='')j=j+1

script

⇔def boucle(fin):

k=0while k<fin:

print(k,end='')k=k+1

script

Ï N’est utilisable que localement.

>>> j=17>>> boucle(3)012>>> j17

shell

22/54

Page 98: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Variables locales Partie v. Variables locales/globales

Ï On appelle variable localeÏ une variable définie dans le corps d’une fonction.Ï une variable définie comme argument d’une fonction

Ï Les noms n’ont pas d’importance.def boucle(n):

j=0while j<n:

print(j,end='')j=j+1

script

def boucle(fin):k=0while k<fin:

print(k,end='')k=k+1

script

Ï N’est utilisable que localement.

>>> j=17>>> boucle(3)012>>> j17

shell

22/54

Page 99: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Variables locales Partie v. Variables locales/globales

Ï On appelle variable localeÏ une variable définie dans le corps d’une fonction.Ï une variable définie comme argument d’une fonction

Ï Les noms n’ont pas d’importance.def boucle(n):

j=0while j<n:

print(j,end='')j=j+1

script

⇔def boucle(fin):

k=0while k<fin:

print(k,end='')k=k+1

script

Ï N’est utilisable que localement.

>>> j=17>>> boucle(3)012>>> j17

shell

22/54

Page 100: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Variables locales Partie v. Variables locales/globales

Ï On appelle variable localeÏ une variable définie dans le corps d’une fonction.Ï une variable définie comme argument d’une fonction

Ï Les noms n’ont pas d’importance.def boucle(n):

j=0while j<n:

print(j,end='')j=j+1

script

⇔def boucle(fin):

k=0while k<fin:

print(k,end='')k=k+1

script

Ï N’est utilisable que localement.

>>>

j=17>>> boucle(3)012>>> j17

shell

22/54

Page 101: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Variables locales Partie v. Variables locales/globales

Ï On appelle variable localeÏ une variable définie dans le corps d’une fonction.Ï une variable définie comme argument d’une fonction

Ï Les noms n’ont pas d’importance.def boucle(n):

j=0while j<n:

print(j,end='')j=j+1

script

⇔def boucle(fin):

k=0while k<fin:

print(k,end='')k=k+1

script

Ï N’est utilisable que localement.

>>> j=17

>>> boucle(3)012>>> j17

shell

22/54

Page 102: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Variables locales Partie v. Variables locales/globales

Ï On appelle variable localeÏ une variable définie dans le corps d’une fonction.Ï une variable définie comme argument d’une fonction

Ï Les noms n’ont pas d’importance.def boucle(n):

j=0while j<n:

print(j,end='')j=j+1

script

⇔def boucle(fin):

k=0while k<fin:

print(k,end='')k=k+1

script

Ï N’est utilisable que localement.

>>> j=17>>>

boucle(3)012>>> j17

shell

22/54

Page 103: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Variables locales Partie v. Variables locales/globales

Ï On appelle variable localeÏ une variable définie dans le corps d’une fonction.Ï une variable définie comme argument d’une fonction

Ï Les noms n’ont pas d’importance.def boucle(n):

j=0while j<n:

print(j,end='')j=j+1

script

⇔def boucle(fin):

k=0while k<fin:

print(k,end='')k=k+1

script

Ï N’est utilisable que localement.

>>> j=17>>> boucle(3)

012>>> j17

shell

22/54

Page 104: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Variables locales Partie v. Variables locales/globales

Ï On appelle variable localeÏ une variable définie dans le corps d’une fonction.Ï une variable définie comme argument d’une fonction

Ï Les noms n’ont pas d’importance.def boucle(n):

j=0while j<n:

print(j,end='')j=j+1

script

⇔def boucle(fin):

k=0while k<fin:

print(k,end='')k=k+1

script

Ï N’est utilisable que localement.

>>> j=17>>> boucle(3)012>>>

j17

shell

22/54

Page 105: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Variables locales Partie v. Variables locales/globales

Ï On appelle variable localeÏ une variable définie dans le corps d’une fonction.Ï une variable définie comme argument d’une fonction

Ï Les noms n’ont pas d’importance.def boucle(n):

j=0while j<n:

print(j,end='')j=j+1

script

⇔def boucle(fin):

k=0while k<fin:

print(k,end='')k=k+1

script

Ï N’est utilisable que localement.

>>> j=17>>> boucle(3)012>>> j

17

shell

22/54

Page 106: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Variables locales Partie v. Variables locales/globales

Ï On appelle variable localeÏ une variable définie dans le corps d’une fonction.Ï une variable définie comme argument d’une fonction

Ï Les noms n’ont pas d’importance.def boucle(n):

j=0while j<n:

print(j,end='')j=j+1

script

⇔def boucle(fin):

k=0while k<fin:

print(k,end='')k=k+1

script

Ï N’est utilisable que localement.

>>> j=17>>> boucle(3)012>>> j17

shell

22/54

Page 107: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Variables globales Partie v. Variables locales/globales

Ï Une variable en dehors de toute fonction est globale. Pour y faireréférence dans une fonction, il faut le déclarer explicitement.

def boucle(n):global j # <- Je peux utiliser un j défini ailleursprint('j =',j)j=0while j<n:

print(j,end='')j=j+1

script

Ï Contrairement aux variables locales, les noms sont importants.

>>> j=17>>> boucle(3)j = 17012>>> j3

shell

Ï Par défault, les variables sont locales

Ï Variable globale : à éviter sauf cas exceptionnels.

23/54

Page 108: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Variables globales Partie v. Variables locales/globales

Ï Une variable en dehors de toute fonction est globale. Pour y faireréférence dans une fonction, il faut le déclarer explicitement.

def boucle(n):global j # <- Je peux utiliser un j défini ailleursprint('j =',j)j=0while j<n:

print(j,end='')j=j+1

script

Ï Contrairement aux variables locales, les noms sont importants.

>>>

j=17>>> boucle(3)j = 17012>>> j3

shell

Ï Par défault, les variables sont locales

Ï Variable globale : à éviter sauf cas exceptionnels.

23/54

Page 109: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Variables globales Partie v. Variables locales/globales

Ï Une variable en dehors de toute fonction est globale. Pour y faireréférence dans une fonction, il faut le déclarer explicitement.

def boucle(n):global j # <- Je peux utiliser un j défini ailleursprint('j =',j)j=0while j<n:

print(j,end='')j=j+1

script

Ï Contrairement aux variables locales, les noms sont importants.

>>> j=17

>>> boucle(3)j = 17012>>> j3

shell

Ï Par défault, les variables sont locales

Ï Variable globale : à éviter sauf cas exceptionnels.

23/54

Page 110: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Variables globales Partie v. Variables locales/globales

Ï Une variable en dehors de toute fonction est globale. Pour y faireréférence dans une fonction, il faut le déclarer explicitement.

def boucle(n):global j # <- Je peux utiliser un j défini ailleursprint('j =',j)j=0while j<n:

print(j,end='')j=j+1

script

Ï Contrairement aux variables locales, les noms sont importants.

>>> j=17>>>

boucle(3)j = 17012>>> j3

shell

Ï Par défault, les variables sont locales

Ï Variable globale : à éviter sauf cas exceptionnels.

23/54

Page 111: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Variables globales Partie v. Variables locales/globales

Ï Une variable en dehors de toute fonction est globale. Pour y faireréférence dans une fonction, il faut le déclarer explicitement.

def boucle(n):global j # <- Je peux utiliser un j défini ailleursprint('j =',j)j=0while j<n:

print(j,end='')j=j+1

script

Ï Contrairement aux variables locales, les noms sont importants.

>>> j=17>>> boucle(3)

j = 17012>>> j3

shell

Ï Par défault, les variables sont locales

Ï Variable globale : à éviter sauf cas exceptionnels.

23/54

Page 112: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Variables globales Partie v. Variables locales/globales

Ï Une variable en dehors de toute fonction est globale. Pour y faireréférence dans une fonction, il faut le déclarer explicitement.

def boucle(n):global j # <- Je peux utiliser un j défini ailleursprint('j =',j)j=0while j<n:

print(j,end='')j=j+1

script

Ï Contrairement aux variables locales, les noms sont importants.

>>> j=17>>> boucle(3)j = 17012>>>

j3

shell

Ï Par défault, les variables sont locales

Ï Variable globale : à éviter sauf cas exceptionnels.

23/54

Page 113: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Variables globales Partie v. Variables locales/globales

Ï Une variable en dehors de toute fonction est globale. Pour y faireréférence dans une fonction, il faut le déclarer explicitement.

def boucle(n):global j # <- Je peux utiliser un j défini ailleursprint('j =',j)j=0while j<n:

print(j,end='')j=j+1

script

Ï Contrairement aux variables locales, les noms sont importants.

>>> j=17>>> boucle(3)j = 17012>>> j

3

shell

Ï Par défault, les variables sont locales

Ï Variable globale : à éviter sauf cas exceptionnels.

23/54

Page 114: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Variables globales Partie v. Variables locales/globales

Ï Une variable en dehors de toute fonction est globale. Pour y faireréférence dans une fonction, il faut le déclarer explicitement.

def boucle(n):global j # <- Je peux utiliser un j défini ailleursprint('j =',j)j=0while j<n:

print(j,end='')j=j+1

script

Ï Contrairement aux variables locales, les noms sont importants.

>>> j=17>>> boucle(3)j = 17012>>> j3

shell

Ï Par défault, les variables sont locales

Ï Variable globale : à éviter sauf cas exceptionnels.

23/54

Page 115: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Variables globales Partie v. Variables locales/globales

Ï Une variable en dehors de toute fonction est globale. Pour y faireréférence dans une fonction, il faut le déclarer explicitement.

def boucle(n):global j # <- Je peux utiliser un j défini ailleursprint('j =',j)j=0while j<n:

print(j,end='')j=j+1

script

Ï Contrairement aux variables locales, les noms sont importants.

>>> j=17>>> boucle(3)j = 17012>>> j3

shell

Ï Par défault, les variables sont locales

Ï Variable globale : à éviter sauf cas exceptionnels.

23/54

Page 116: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Variables globales Partie v. Variables locales/globales

Ï Une variable en dehors de toute fonction est globale. Pour y faireréférence dans une fonction, il faut le déclarer explicitement.

def boucle(n):global j # <- Je peux utiliser un j défini ailleursprint('j =',j)j=0while j<n:

print(j,end='')j=j+1

script

Ï Contrairement aux variables locales, les noms sont importants.

>>> j=17>>> boucle(3)j = 17012>>> j3

shell

Ï Par défault, les variables sont locales

Ï Variable globale : à éviter sauf cas exceptionnels.23/54

Page 117: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Fonctions locales Partie v. Variables locales/globales

Ï On peut définir une fonction dans une fonction

def max3(a,b,c):def max2(x,y):

if x>y: return xelse: return y

return max2(max2(a,b),c)

script

Ï Mais la fonction locale ne peut pas être utilisée ailleurs.

>>> max3(17,-5,133)133>>> max2(3,4)Traceback (most recent call last):File "<stdin>", line 1, in <module>

NameError: name 'max2' is not defined

shell

Ï Difficile à lire. Privilégiez des fonctions locales sur 1 ou 2 lignes.

def cercle(t):def X(t): return 100*cos(t/10)def Y(t): return 100*sin(t/10)return (X(t),Y(t))

script

24/54

Page 118: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Fonctions locales Partie v. Variables locales/globales

Ï On peut définir une fonction dans une fonction

def max3(a,b,c):def max2(x,y):

if x>y: return xelse: return y

return max2(max2(a,b),c)

script

Ï Mais la fonction locale ne peut pas être utilisée ailleurs.

>>> max3(17,-5,133)133>>> max2(3,4)Traceback (most recent call last):File "<stdin>", line 1, in <module>

NameError: name 'max2' is not defined

shell

Ï Difficile à lire. Privilégiez des fonctions locales sur 1 ou 2 lignes.

def cercle(t):def X(t): return 100*cos(t/10)def Y(t): return 100*sin(t/10)return (X(t),Y(t))

script

24/54

Page 119: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Fonctions locales Partie v. Variables locales/globales

Ï On peut définir une fonction dans une fonction

def max3(a,b,c):def max2(x,y):

if x>y: return xelse: return y

return max2(max2(a,b),c)

script

Ï Mais la fonction locale ne peut pas être utilisée ailleurs.

>>>

max3(17,-5,133)133>>> max2(3,4)Traceback (most recent call last):File "<stdin>", line 1, in <module>

NameError: name 'max2' is not defined

shell

Ï Difficile à lire. Privilégiez des fonctions locales sur 1 ou 2 lignes.

def cercle(t):def X(t): return 100*cos(t/10)def Y(t): return 100*sin(t/10)return (X(t),Y(t))

script

24/54

Page 120: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Fonctions locales Partie v. Variables locales/globales

Ï On peut définir une fonction dans une fonction

def max3(a,b,c):def max2(x,y):

if x>y: return xelse: return y

return max2(max2(a,b),c)

script

Ï Mais la fonction locale ne peut pas être utilisée ailleurs.

>>> max3(17,-5,133)

133>>> max2(3,4)Traceback (most recent call last):File "<stdin>", line 1, in <module>

NameError: name 'max2' is not defined

shell

Ï Difficile à lire. Privilégiez des fonctions locales sur 1 ou 2 lignes.

def cercle(t):def X(t): return 100*cos(t/10)def Y(t): return 100*sin(t/10)return (X(t),Y(t))

script

24/54

Page 121: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Fonctions locales Partie v. Variables locales/globales

Ï On peut définir une fonction dans une fonction

def max3(a,b,c):def max2(x,y):

if x>y: return xelse: return y

return max2(max2(a,b),c)

script

Ï Mais la fonction locale ne peut pas être utilisée ailleurs.

>>> max3(17,-5,133)133>>>

max2(3,4)Traceback (most recent call last):File "<stdin>", line 1, in <module>

NameError: name 'max2' is not defined

shell

Ï Difficile à lire. Privilégiez des fonctions locales sur 1 ou 2 lignes.

def cercle(t):def X(t): return 100*cos(t/10)def Y(t): return 100*sin(t/10)return (X(t),Y(t))

script

24/54

Page 122: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Fonctions locales Partie v. Variables locales/globales

Ï On peut définir une fonction dans une fonction

def max3(a,b,c):def max2(x,y):

if x>y: return xelse: return y

return max2(max2(a,b),c)

script

Ï Mais la fonction locale ne peut pas être utilisée ailleurs.

>>> max3(17,-5,133)133>>> max2(3,4)

Traceback (most recent call last):File "<stdin>", line 1, in <module>

NameError: name 'max2' is not defined

shell

Ï Difficile à lire. Privilégiez des fonctions locales sur 1 ou 2 lignes.

def cercle(t):def X(t): return 100*cos(t/10)def Y(t): return 100*sin(t/10)return (X(t),Y(t))

script

24/54

Page 123: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Fonctions locales Partie v. Variables locales/globales

Ï On peut définir une fonction dans une fonction

def max3(a,b,c):def max2(x,y):

if x>y: return xelse: return y

return max2(max2(a,b),c)

script

Ï Mais la fonction locale ne peut pas être utilisée ailleurs.

>>> max3(17,-5,133)133>>> max2(3,4)Traceback (most recent call last):File "<stdin>", line 1, in <module>

NameError: name 'max2' is not defined

shell

Ï Difficile à lire. Privilégiez des fonctions locales sur 1 ou 2 lignes.

def cercle(t):def X(t): return 100*cos(t/10)def Y(t): return 100*sin(t/10)return (X(t),Y(t))

script

24/54

Page 124: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Fonctions locales Partie v. Variables locales/globales

Ï On peut définir une fonction dans une fonction

def max3(a,b,c):def max2(x,y):

if x>y: return xelse: return y

return max2(max2(a,b),c)

script

Ï Mais la fonction locale ne peut pas être utilisée ailleurs.

>>> max3(17,-5,133)133>>> max2(3,4)Traceback (most recent call last):File "<stdin>", line 1, in <module>

NameError: name 'max2' is not defined

shell

Ï Difficile à lire.

Privilégiez des fonctions locales sur 1 ou 2 lignes.

def cercle(t):def X(t): return 100*cos(t/10)def Y(t): return 100*sin(t/10)return (X(t),Y(t))

script

24/54

Page 125: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Fonctions locales Partie v. Variables locales/globales

Ï On peut définir une fonction dans une fonction

def max3(a,b,c):def max2(x,y):

if x>y: return xelse: return y

return max2(max2(a,b),c)

script

Ï Mais la fonction locale ne peut pas être utilisée ailleurs.

>>> max3(17,-5,133)133>>> max2(3,4)Traceback (most recent call last):File "<stdin>", line 1, in <module>

NameError: name 'max2' is not defined

shell

Ï Difficile à lire. Privilégiez des fonctions locales sur 1 ou 2 lignes.

def cercle(t):def X(t): return 100*cos(t/10)def Y(t): return 100*sin(t/10)return (X(t),Y(t))

script

24/54

Page 126: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Procédures et fonctions Partie v. Variables locales/globales

Il y a deux types de programme.

Ï Les fonctions sont des programmes qui renvoient (return) une valeur etne modifient pas l’état.

Ï semblables au fonction mathématique

Ï Les procédures sont des programmes qui ne renvoient aucune valeurmais modifient l’état du système. L’état peut être :

Ï L’affichage sur l’écran (print) ;Ï la sauvegarde d’un fichier sur le disque ;Ï la modification d’une fenêtre graphique.

Ï On peut modifier l’état et renvoyer une valeur en même temps.Ï À éviter sans bonnes raisons.

25/54

Page 127: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Procédures et fonctions Partie v. Variables locales/globales

Il y a deux types de programme.

Ï Les fonctions sont des programmes qui renvoient (return) une valeur etne modifient pas l’état.

Ï semblables au fonction mathématique

Ï Les procédures sont des programmes qui ne renvoient aucune valeurmais modifient l’état du système. L’état peut être :

Ï L’affichage sur l’écran (print) ;Ï la sauvegarde d’un fichier sur le disque ;Ï la modification d’une fenêtre graphique.

Ï On peut modifier l’état et renvoyer une valeur en même temps.Ï À éviter sans bonnes raisons.

25/54

Page 128: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Procédures et fonctions Partie v. Variables locales/globales

Il y a deux types de programme.

Ï Les fonctions sont des programmes qui renvoient (return) une valeur etne modifient pas l’état.

Ï semblables au fonction mathématique

Ï Les procédures sont des programmes qui ne renvoient aucune valeurmais modifient l’état du système. L’état peut être :

Ï L’affichage sur l’écran (print) ;Ï la sauvegarde d’un fichier sur le disque ;Ï la modification d’une fenêtre graphique.

Ï On peut modifier l’état et renvoyer une valeur en même temps.Ï À éviter sans bonnes raisons.

25/54

Page 129: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Procédures et fonctions Partie v. Variables locales/globales

Il y a deux types de programme.

Ï Les fonctions sont des programmes qui renvoient (return) une valeur etne modifient pas l’état.

Ï semblables au fonction mathématique

Ï Les procédures sont des programmes qui ne renvoient aucune valeurmais modifient l’état du système.

L’état peut être :Ï L’affichage sur l’écran (print) ;Ï la sauvegarde d’un fichier sur le disque ;Ï la modification d’une fenêtre graphique.

Ï On peut modifier l’état et renvoyer une valeur en même temps.Ï À éviter sans bonnes raisons.

25/54

Page 130: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Procédures et fonctions Partie v. Variables locales/globales

Il y a deux types de programme.

Ï Les fonctions sont des programmes qui renvoient (return) une valeur etne modifient pas l’état.

Ï semblables au fonction mathématique

Ï Les procédures sont des programmes qui ne renvoient aucune valeurmais modifient l’état du système. L’état peut être :

Ï L’affichage sur l’écran (print) ;

Ï la sauvegarde d’un fichier sur le disque ;Ï la modification d’une fenêtre graphique.

Ï On peut modifier l’état et renvoyer une valeur en même temps.Ï À éviter sans bonnes raisons.

25/54

Page 131: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Procédures et fonctions Partie v. Variables locales/globales

Il y a deux types de programme.

Ï Les fonctions sont des programmes qui renvoient (return) une valeur etne modifient pas l’état.

Ï semblables au fonction mathématique

Ï Les procédures sont des programmes qui ne renvoient aucune valeurmais modifient l’état du système. L’état peut être :

Ï L’affichage sur l’écran (print) ;Ï la sauvegarde d’un fichier sur le disque ;

Ï la modification d’une fenêtre graphique.

Ï On peut modifier l’état et renvoyer une valeur en même temps.Ï À éviter sans bonnes raisons.

25/54

Page 132: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Procédures et fonctions Partie v. Variables locales/globales

Il y a deux types de programme.

Ï Les fonctions sont des programmes qui renvoient (return) une valeur etne modifient pas l’état.

Ï semblables au fonction mathématique

Ï Les procédures sont des programmes qui ne renvoient aucune valeurmais modifient l’état du système. L’état peut être :

Ï L’affichage sur l’écran (print) ;Ï la sauvegarde d’un fichier sur le disque ;Ï la modification d’une fenêtre graphique.

Ï On peut modifier l’état et renvoyer une valeur en même temps.Ï À éviter sans bonnes raisons.

25/54

Page 133: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Procédures et fonctions Partie v. Variables locales/globales

Il y a deux types de programme.

Ï Les fonctions sont des programmes qui renvoient (return) une valeur etne modifient pas l’état.

Ï semblables au fonction mathématique

Ï Les procédures sont des programmes qui ne renvoient aucune valeurmais modifient l’état du système. L’état peut être :

Ï L’affichage sur l’écran (print) ;Ï la sauvegarde d’un fichier sur le disque ;Ï la modification d’une fenêtre graphique.

Ï On peut modifier l’état et renvoyer une valeur en même temps.

Ï À éviter sans bonnes raisons.

25/54

Page 134: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Procédures et fonctions Partie v. Variables locales/globales

Il y a deux types de programme.

Ï Les fonctions sont des programmes qui renvoient (return) une valeur etne modifient pas l’état.

Ï semblables au fonction mathématique

Ï Les procédures sont des programmes qui ne renvoient aucune valeurmais modifient l’état du système. L’état peut être :

Ï L’affichage sur l’écran (print) ;Ï la sauvegarde d’un fichier sur le disque ;Ï la modification d’une fenêtre graphique.

Ï On peut modifier l’état et renvoyer une valeur en même temps.Ï À éviter sans bonnes raisons.

25/54

Page 135: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Sommaire

f Partie i. Annonces

f Partie ii. Du graphisme en programmation

f Partie iii. Déplacements Absolus

f Partie iv. Déplacement relatif

f Partie v. Variables locales/globales

f Partie vi. Processing

f Partie vii. Faire des animations

f Partie viii. Gestion du clavier

f Partie ix. Table des matières26/54

Page 136: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Qu’est-ce donc? Partie vi. Processing

Ï Processing est un environnement de programmation libre (et gratuit)Ï Disponible pour : GNU/Linux, Windows, Mac, Android, Rasperry Pi,

Ï Permet de construire une scène statique.Ï c’est-à-dire une image composée de formes élémentaires.

Ï Permet aussi de programmer une scène animée.Ï Une animation n’est qu’une suite d’images.

Ï Permet de gérer une scène interactive (jeu, etc.)Ï Gestion du clavier et de la souris.

27/54

Page 137: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Qu’est-ce donc? Partie vi. Processing

Ï Processing est un environnement de programmation libre (et gratuit)Ï Disponible pour : GNU/Linux, Windows, Mac, Android, Rasperry Pi,

Ï Permet de construire une scène statique.Ï c’est-à-dire une image composée de formes élémentaires.

Ï Permet aussi de programmer une scène animée.Ï Une animation n’est qu’une suite d’images.

Ï Permet de gérer une scène interactive (jeu, etc.)Ï Gestion du clavier et de la souris.

27/54

Page 138: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Qu’est-ce donc? Partie vi. Processing

Ï Processing est un environnement de programmation libre (et gratuit)Ï Disponible pour : GNU/Linux, Windows, Mac, Android, Rasperry Pi,

Ï Permet de construire une scène statique.Ï c’est-à-dire une image composée de formes élémentaires.

Ï Permet aussi de programmer une scène animée.Ï Une animation n’est qu’une suite d’images.

Ï Permet de gérer une scène interactive (jeu, etc.)Ï Gestion du clavier et de la souris.

27/54

Page 139: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Qu’est-ce donc? Partie vi. Processing

Ï Processing est un environnement de programmation libre (et gratuit)Ï Disponible pour : GNU/Linux, Windows, Mac, Android, Rasperry Pi,

Ï Permet de construire une scène statique.Ï c’est-à-dire une image composée de formes élémentaires.

Ï Permet aussi de programmer une scène animée.Ï Une animation n’est qu’une suite d’images.

Ï Permet de gérer une scène interactive (jeu, etc.)Ï Gestion du clavier et de la souris.

27/54

Page 140: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Le mode Python Partie vi. Processing

Ï Processing possède plusieurs modes (Java, Javascript, Python).

Ï Le mode Python permet d’écrire du code qui s’évalue comme sous IDLE(à quelques détails près : c’est du Python 2).

Sélectionnez le mode Pythonet, au besoin, installez-le.

28/54

Page 141: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Le mode Python Partie vi. Processing

Ï Processing possède plusieurs modes (Java, Javascript, Python).

Ï Le mode Python permet d’écrire du code qui s’évalue comme sous IDLE(à quelques détails près : c’est du Python 2).

Sélectionnez le mode Pythonet, au besoin, installez-le.

28/54

Page 142: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Le mode Python Partie vi. Processing

Ï Processing possède plusieurs modes (Java, Javascript, Python).

Ï Le mode Python permet d’écrire du code qui s’évalue comme sous IDLE(à quelques détails près : c’est du Python 2).

Sélectionnez le mode Pythonet, au besoin, installez-le.

28/54

Page 143: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Mon premier programme Partie vi. Processing

Exécuter

Ï Un projet Processing s’appelle un « sketch ».

Ï Quand vous sauvez un projet, vous créez un répertoire qui contient votrecode : c’est le fichier avec une extension .pyde.

Ï Dans ce répertoire, vous pourrez aussi avoir un sous-répertoire data quicontient des données (images, textes, etc.) qui seront utilisées par le projet.

29/54

Page 144: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Mon premier programme Partie vi. Processing

Exécuter

Ï Un projet Processing s’appelle un « sketch ».

Ï Quand vous sauvez un projet, vous créez un répertoire qui contient votrecode : c’est le fichier avec une extension .pyde.

Ï Dans ce répertoire, vous pourrez aussi avoir un sous-répertoire data quicontient des données (images, textes, etc.) qui seront utilisées par le projet.

29/54

Page 145: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Mon premier programme Partie vi. Processing

Exécuter

Ï Un projet Processing s’appelle un « sketch ».

Ï Quand vous sauvez un projet, vous créez un répertoire qui contient votrecode : c’est le fichier avec une extension .pyde.

Ï Dans ce répertoire, vous pourrez aussi avoir un sous-répertoire data quicontient des données (images, textes, etc.) qui seront utilisées par le projet.

29/54

Page 146: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Le système RGB Partie vi. Processing

Ï En informatique, toutes les couleurs sont codées comme la somme detrois couleurs : le rouge, le vert et le bleu (RGB)

Chaque couleur va de 0 à 255.Ï Rouge : (255,0,0)Ï Vert : (0,255,0)Ï Bleu : (0, 0, 255)

Ï Noir (0,0,0)Ï Gris foncé (17, 17, 17)Ï Gris clair (200,200,200)Ï Blanc (255,255,255)

Ï Jaune (255,255,0)Ï Magenta (255,0,255)Ï Cyan (0,255,255)

Ï Bleu flash (0,0,255)Ï Bleu foncé (0,0,100)Ï Bleu clair (99,99,255)

30/54

Page 147: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Le système RGB Partie vi. Processing

Ï En informatique, toutes les couleurs sont codées comme la somme detrois couleurs : le rouge, le vert et le bleu (RGB)

Chaque couleur va de 0 à 255.Ï Rouge : (255,0,0)Ï Vert : (0,255,0)Ï Bleu : (0, 0, 255)

Ï Noir (0,0,0)Ï Gris foncé (17, 17, 17)Ï Gris clair (200,200,200)Ï Blanc (255,255,255)

Ï Jaune (255,255,0)Ï Magenta (255,0,255)Ï Cyan (0,255,255)

Ï Bleu flash (0,0,255)Ï Bleu foncé (0,0,100)Ï Bleu clair (99,99,255)

30/54

Page 148: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Le système RGB Partie vi. Processing

Ï En informatique, toutes les couleurs sont codées comme la somme detrois couleurs : le rouge, le vert et le bleu (RGB)

Chaque couleur va de 0 à 255.Ï Rouge : (255,0,0)Ï Vert : (0,255,0)Ï Bleu : (0, 0, 255)

Ï Noir (0,0,0)Ï Gris foncé (17, 17, 17)Ï Gris clair (200,200,200)Ï Blanc (255,255,255)

Ï Jaune (255,255,0)Ï Magenta (255,0,255)Ï Cyan (0,255,255)

Ï Bleu flash (0,0,255)Ï Bleu foncé (0,0,100)Ï Bleu clair (99,99,255)

30/54

Page 149: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Le système RGB Partie vi. Processing

Ï En informatique, toutes les couleurs sont codées comme la somme detrois couleurs : le rouge, le vert et le bleu (RGB)

Chaque couleur va de 0 à 255.Ï Rouge : (255,0,0)Ï Vert : (0,255,0)Ï Bleu : (0, 0, 255)

Ï Noir (0,0,0)Ï Gris foncé (17, 17, 17)Ï Gris clair (200,200,200)Ï Blanc (255,255,255)

Ï Jaune (255,255,0)Ï Magenta (255,0,255)Ï Cyan (0,255,255)

Ï Bleu flash (0,0,255)Ï Bleu foncé (0,0,100)Ï Bleu clair (99,99,255)

30/54

Page 150: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Le système RGB Partie vi. Processing

Ï En informatique, toutes les couleurs sont codées comme la somme detrois couleurs : le rouge, le vert et le bleu (RGB)

Chaque couleur va de 0 à 255.Ï Rouge : (255,0,0)Ï Vert : (0,255,0)Ï Bleu : (0, 0, 255)

Ï Noir (0,0,0)Ï Gris foncé (17, 17, 17)Ï Gris clair (200,200,200)Ï Blanc (255,255,255)

Ï Jaune (255,255,0)Ï Magenta (255,0,255)Ï Cyan (0,255,255)

Ï Bleu flash (0,0,255)Ï Bleu foncé (0,0,100)Ï Bleu clair (99,99,255)

30/54

Page 151: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Formes géométriques de base Partie vi. Processing

# Définition des couleursrouge = color(255, 0, 0)vert = color(0, 255, 0)bleu = color(0, 0, 255)jaune = color(255, 255, 0)rouge_40pc = color(255, 0, 0, 40)# Mis en place fenêtresize(200, 400)background(jaune)

# Ligne noireline(50, 20, 200, 400)# Le carré bleustroke(rouge)fill(bleu)rect(50, 50, 30, 30)# L’ellipse vertefill(vert)ellipse(170, 300, 200, 50)# Le disque rougefill(rouge_40pc)ellipse(130, 250, 100, 100)

script

31/54

Page 152: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Les coordonnées en informatique Partie vi. Processing

�Processing, comme la plupart des langages de programmation

graphique n’utilise pas l’orientation habituelle des axes en mathématiques.

Mathématiques Informatique

32/54

Page 153: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Les coordonnées en informatique Partie vi. Processing

�Processing, comme la plupart des langages de programmation

graphique n’utilise pas l’orientation habituelle des axes en mathématiques.

Mathématiques Informatique

32/54

Page 154: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Les modes CORNER, CORNERS et CENTER Partie vi. Processing

size(400, 400)line(100, 0, 100, 400)line(300, 0, 300, 400)line(0, 150, 400, 150)line(0, 350, 400, 350)

fill(255, 0, 0) # rougerect(100, 150, 70, 50)

rectMode(CORNERS)fill(0, 0, 255) # bleurect(300, 350, 370, 400)

rectMode(CENTER)fill(0, 255, 0) # vertrect(300, 150, 70, 50)

ellipseMode(CORNER)fill(255, 255, 0) # jauneellipse(100, 350, 70, 50)

script

Ï CORNER (par défaut) :(xgauche, yhaut, largeur, hauteur)Ï CORNERS :(xgauche, yhaut, xdroite, ybas)Ï CENTER :(xcentre, ycentre, larg, haut)

33/54

Page 155: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Les modes CORNER, CORNERS et CENTER Partie vi. Processing

size(400, 400)line(100, 0, 100, 400)line(300, 0, 300, 400)line(0, 150, 400, 150)line(0, 350, 400, 350)

fill(255, 0, 0) # rougerect(100, 150, 70, 50)

rectMode(CORNERS)fill(0, 0, 255) # bleurect(300, 350, 370, 400)

rectMode(CENTER)fill(0, 255, 0) # vertrect(300, 150, 70, 50)

ellipseMode(CORNER)fill(255, 255, 0) # jauneellipse(100, 350, 70, 50)

script

Ï CORNER (par défaut) :(xgauche, yhaut, largeur, hauteur)

Ï CORNERS :(xgauche, yhaut, xdroite, ybas)Ï CENTER :(xcentre, ycentre, larg, haut)

33/54

Page 156: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Les modes CORNER, CORNERS et CENTER Partie vi. Processing

size(400, 400)line(100, 0, 100, 400)line(300, 0, 300, 400)line(0, 150, 400, 150)line(0, 350, 400, 350)

fill(255, 0, 0) # rougerect(100, 150, 70, 50)

rectMode(CORNERS)fill(0, 0, 255) # bleurect(300, 350, 370, 400)

rectMode(CENTER)fill(0, 255, 0) # vertrect(300, 150, 70, 50)

ellipseMode(CORNER)fill(255, 255, 0) # jauneellipse(100, 350, 70, 50)

script

Ï CORNER (par défaut) :(xgauche, yhaut, largeur, hauteur)Ï CORNERS :(xgauche, yhaut, xdroite, ybas)

Ï CENTER :(xcentre, ycentre, larg, haut)

33/54

Page 157: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Les modes CORNER, CORNERS et CENTER Partie vi. Processing

size(400, 400)line(100, 0, 100, 400)line(300, 0, 300, 400)line(0, 150, 400, 150)line(0, 350, 400, 350)

fill(255, 0, 0) # rougerect(100, 150, 70, 50)

rectMode(CORNERS)fill(0, 0, 255) # bleurect(300, 350, 370, 400)

rectMode(CENTER)fill(0, 255, 0) # vertrect(300, 150, 70, 50)

ellipseMode(CORNER)fill(255, 255, 0) # jauneellipse(100, 350, 70, 50)

script

Ï CORNER (par défaut) :(xgauche, yhaut, largeur, hauteur)Ï CORNERS :(xgauche, yhaut, xdroite, ybas)Ï CENTER :(xcentre, ycentre, larg, haut)

33/54

Page 158: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Les modes CORNER, CORNERS et CENTER Partie vi. Processing

size(400, 400)line(100, 0, 100, 400)line(300, 0, 300, 400)line(0, 150, 400, 150)line(0, 350, 400, 350)

fill(255, 0, 0) # rougerect(100, 150, 70, 50)

rectMode(CORNERS)fill(0, 0, 255) # bleurect(300, 350, 370, 400)

rectMode(CENTER)fill(0, 255, 0) # vertrect(300, 150, 70, 50)

ellipseMode(CORNER)fill(255, 255, 0) # jauneellipse(100, 350, 70, 50)

script

Ï CORNER (par défaut) :(xgauche, yhaut, largeur, hauteur)Ï CORNERS :(xgauche, yhaut, xdroite, ybas)Ï CENTER :(xcentre, ycentre, larg, haut)

33/54

Page 159: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Afficher un texte Partie vi. Processing

size(400,450)background(255,255,100) #jaune blancline(400//2, 0, 400//2, 450)

fill(255, 0, 0) # rougetextSize(14)textAlign(LEFT)text('Gauche', 200, 50)

fname='EB Garamond 08 Regular'size=44 ; font=createFont(fname,size)textFont(font)

textAlign(RIGHT)text('Droite', 200, 200)textAlign(CENTER)text(u'Centré', 200, 300)# u pour UTF-8long = textWidth(u'Centré')rectMode(CENTER)fill(0, 0, 0, 0) # pas de couleur 0rect(400//2, 300-size//2, long, size)

script

Ï print(PFont.list())permet d’afficher la liste desfontes disponibles dans laconsole.Ï Attention aux accents !Marquez vos chaînes commeétant en UTF-8.

34/54

Page 160: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Afficher un texte Partie vi. Processing

size(400,450)background(255,255,100) #jaune blancline(400//2, 0, 400//2, 450)

fill(255, 0, 0) # rougetextSize(14)textAlign(LEFT)text('Gauche', 200, 50)

fname='EB Garamond 08 Regular'size=44 ; font=createFont(fname,size)textFont(font)

textAlign(RIGHT)text('Droite', 200, 200)textAlign(CENTER)text(u'Centré', 200, 300)# u pour UTF-8long = textWidth(u'Centré')rectMode(CENTER)fill(0, 0, 0, 0) # pas de couleur 0rect(400//2, 300-size//2, long, size)

script

Ï print(PFont.list())permet d’afficher la liste desfontes disponibles dans laconsole.

Ï Attention aux accents !Marquez vos chaînes commeétant en UTF-8.

34/54

Page 161: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Afficher un texte Partie vi. Processing

size(400,450)background(255,255,100) #jaune blancline(400//2, 0, 400//2, 450)

fill(255, 0, 0) # rougetextSize(14)textAlign(LEFT)text('Gauche', 200, 50)

fname='EB Garamond 08 Regular'size=44 ; font=createFont(fname,size)textFont(font)

textAlign(RIGHT)text('Droite', 200, 200)textAlign(CENTER)text(u'Centré', 200, 300)# u pour UTF-8long = textWidth(u'Centré')rectMode(CENTER)fill(0, 0, 0, 0) # pas de couleur 0rect(400//2, 300-size//2, long, size)

script

Ï print(PFont.list())permet d’afficher la liste desfontes disponibles dans laconsole.Ï Attention aux accents !Marquez vos chaînes commeétant en UTF-8.

34/54

Page 162: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Insérer des images Partie vi. Processing

# Images : dossier « data »fond = loadImage('gazon.png')escargot = loadImage('escargot.png')size(900, 400); background(fond)imageMode(CENTER)

# Placer l’imageimage(escargot, 90, 80)

# Redimensionnementlarg=escargot.width * 1.8,long=escargot.height * 0.75image(escargot, 300, 200,larg,long)

# TranslationpushMatrix()translate(500, 300)image(escargot, 0, 0)popMatrix()

# Translation + rotationpushMatrix()translate(700, 100)rotate(radians(90))image(escargot, 0, 0)popMatrix()

script

Ï Les commandes placent l’imaged’escargot de gauche à droite.

Ï Pour les rotations, les angles sonten radians, dans le sens des aiguillesd’une montre (sens indirect).

35/54

Page 163: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Insérer des images Partie vi. Processing

# Images : dossier « data »fond = loadImage('gazon.png')escargot = loadImage('escargot.png')size(900, 400); background(fond)imageMode(CENTER)

# Placer l’imageimage(escargot, 90, 80)

# Redimensionnementlarg=escargot.width * 1.8,long=escargot.height * 0.75image(escargot, 300, 200,larg,long)

# TranslationpushMatrix()translate(500, 300)image(escargot, 0, 0)popMatrix()

# Translation + rotationpushMatrix()translate(700, 100)rotate(radians(90))image(escargot, 0, 0)popMatrix()

script

Ï Les commandes placent l’imaged’escargot de gauche à droite.

Ï Pour les rotations, les angles sonten radians, dans le sens des aiguillesd’une montre (sens indirect).

35/54

Page 164: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Insérer des images Partie vi. Processing

# Images : dossier « data »fond = loadImage('gazon.png')escargot = loadImage('escargot.png')size(900, 400); background(fond)imageMode(CENTER)

# Placer l’imageimage(escargot, 90, 80)

# Redimensionnementlarg=escargot.width * 1.8,long=escargot.height * 0.75image(escargot, 300, 200,larg,long)

# TranslationpushMatrix()translate(500, 300)image(escargot, 0, 0)popMatrix()

# Translation + rotationpushMatrix()translate(700, 100)rotate(radians(90))image(escargot, 0, 0)popMatrix()

script

Ï Les commandes placent l’imaged’escargot de gauche à droite.

Ï Pour les rotations, les angles sonten radians, dans le sens des aiguillesd’une montre (sens indirect).

35/54

Page 165: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Sommaire

f Partie i. Annonces

f Partie ii. Du graphisme en programmation

f Partie iii. Déplacements Absolus

f Partie iv. Déplacement relatif

f Partie v. Variables locales/globales

f Partie vi. Processing

f Partie vii. Faire des animations

f Partie viii. Gestion du clavier

f Partie ix. Table des matières36/54

Page 166: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Principes Partie vii. Faire des animations

Ï Pour l’œil une image animée est une succession rapide d’images fixes.

Ï En pratique, 20 à 30 images par seconde suffisent à duper l’œil humain.

Ï On notera FREQ ce nombre, appelé fréquence de rafraîchissiment.

Ï Une horloge va scander la mesure à cette fréquence.

Ï À chaque top d’horloge, on affichera une nouvelle image :Ï soit en modifiant la précédente (efficace, mais pas toujours possible),Ï soit en recouvrant entièrement la précédente.

37/54

Page 167: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Principes Partie vii. Faire des animations

Ï Pour l’œil une image animée est une succession rapide d’images fixes.

Ï En pratique, 20 à 30 images par seconde suffisent à duper l’œil humain.

Ï On notera FREQ ce nombre, appelé fréquence de rafraîchissiment.

Ï Une horloge va scander la mesure à cette fréquence.

Ï À chaque top d’horloge, on affichera une nouvelle image :Ï soit en modifiant la précédente (efficace, mais pas toujours possible),Ï soit en recouvrant entièrement la précédente.

37/54

Page 168: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Principes Partie vii. Faire des animations

Ï Pour l’œil une image animée est une succession rapide d’images fixes.

Ï En pratique, 20 à 30 images par seconde suffisent à duper l’œil humain.

Ï On notera FREQ ce nombre, appelé fréquence de rafraîchissiment.

Ï Une horloge va scander la mesure à cette fréquence.

Ï À chaque top d’horloge, on affichera une nouvelle image :Ï soit en modifiant la précédente (efficace, mais pas toujours possible),Ï soit en recouvrant entièrement la précédente.

37/54

Page 169: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Principes Partie vii. Faire des animations

Ï Pour l’œil une image animée est une succession rapide d’images fixes.

Ï En pratique, 20 à 30 images par seconde suffisent à duper l’œil humain.

Ï On notera FREQ ce nombre, appelé fréquence de rafraîchissiment.

Ï Une horloge va scander la mesure à cette fréquence.

Ï À chaque top d’horloge, on affichera une nouvelle image :Ï soit en modifiant la précédente (efficace, mais pas toujours possible),Ï soit en recouvrant entièrement la précédente.

37/54

Page 170: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Principes Partie vii. Faire des animations

Ï Pour l’œil une image animée est une succession rapide d’images fixes.

Ï En pratique, 20 à 30 images par seconde suffisent à duper l’œil humain.

Ï On notera FREQ ce nombre, appelé fréquence de rafraîchissiment.

Ï Une horloge va scander la mesure à cette fréquence.

Ï À chaque top d’horloge, on affichera une nouvelle image :Ï soit en modifiant la précédente (efficace, mais pas toujours possible),Ï soit en recouvrant entièrement la précédente.

37/54

Page 171: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Approche Partie vii. Faire des animations

Ï Comment résoudre un problème complexe (ex : faire une animation) ?Ï le découper en sous-problèmes indépendents.Ï ici trois sous-problèmes suffisent.

Ï Remarquons qu’ils y a deux types de paramètres du système :Ï ceux qui sont fixes tout au long de l’animation (les données initiales)Ï ceux qui évoluent (l’état).

Ï (1) Qu’est ce qui permet de décrire l’état du système?Ï souvent une collection de nombres suffisent.Ï La position (abcisse et ordonné), le cap, la taille, etc.Ï Seul ce qui évolue est dans l’état.

Ï (2) Quelle image afficher à partir de l’état et des données initiales.Ï Tracer le fond.Ï Placer et tracer les objets en fonction de leur état.

Ï (3) Comment l’état évolue-t-il ?

38/54

Page 172: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Approche Partie vii. Faire des animations

Ï Comment résoudre un problème complexe (ex : faire une animation) ?Ï le découper en sous-problèmes indépendents.Ï ici trois sous-problèmes suffisent.

Ï Remarquons qu’ils y a deux types de paramètres du système :Ï ceux qui sont fixes tout au long de l’animation (les données initiales)Ï ceux qui évoluent (l’état).

Ï (1) Qu’est ce qui permet de décrire l’état du système?Ï souvent une collection de nombres suffisent.Ï La position (abcisse et ordonné), le cap, la taille, etc.Ï Seul ce qui évolue est dans l’état.

Ï (2) Quelle image afficher à partir de l’état et des données initiales.Ï Tracer le fond.Ï Placer et tracer les objets en fonction de leur état.

Ï (3) Comment l’état évolue-t-il ?

38/54

Page 173: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Approche Partie vii. Faire des animations

Ï Comment résoudre un problème complexe (ex : faire une animation) ?Ï le découper en sous-problèmes indépendents.Ï ici trois sous-problèmes suffisent.

Ï Remarquons qu’ils y a deux types de paramètres du système :Ï ceux qui sont fixes tout au long de l’animation (les données initiales)Ï ceux qui évoluent (l’état).

Ï (1) Qu’est ce qui permet de décrire l’état du système?Ï souvent une collection de nombres suffisent.Ï La position (abcisse et ordonné), le cap, la taille, etc.Ï Seul ce qui évolue est dans l’état.

Ï (2) Quelle image afficher à partir de l’état et des données initiales.Ï Tracer le fond.Ï Placer et tracer les objets en fonction de leur état.

Ï (3) Comment l’état évolue-t-il ?

38/54

Page 174: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Approche Partie vii. Faire des animations

Ï Comment résoudre un problème complexe (ex : faire une animation) ?Ï le découper en sous-problèmes indépendents.Ï ici trois sous-problèmes suffisent.

Ï Remarquons qu’ils y a deux types de paramètres du système :Ï ceux qui sont fixes tout au long de l’animation (les données initiales)Ï ceux qui évoluent (l’état).

Ï (1) Qu’est ce qui permet de décrire l’état du système?Ï souvent une collection de nombres suffisent.Ï La position (abcisse et ordonné), le cap, la taille, etc.Ï Seul ce qui évolue est dans l’état.

Ï (2) Quelle image afficher à partir de l’état et des données initiales.Ï Tracer le fond.Ï Placer et tracer les objets en fonction de leur état.

Ï (3) Comment l’état évolue-t-il ?

38/54

Page 175: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Approche Partie vii. Faire des animations

Ï Comment résoudre un problème complexe (ex : faire une animation) ?Ï le découper en sous-problèmes indépendents.Ï ici trois sous-problèmes suffisent.

Ï Remarquons qu’ils y a deux types de paramètres du système :Ï ceux qui sont fixes tout au long de l’animation (les données initiales)Ï ceux qui évoluent (l’état).

Ï (1) Qu’est ce qui permet de décrire l’état du système?Ï souvent une collection de nombres suffisent.Ï La position (abcisse et ordonné), le cap, la taille, etc.Ï Seul ce qui évolue est dans l’état.

Ï (2) Quelle image afficher à partir de l’état et des données initiales.Ï Tracer le fond.Ï Placer et tracer les objets en fonction de leur état.

Ï (3) Comment l’état évolue-t-il ?

38/54

Page 176: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Le modèle MVC Partie vii. Faire des animations

Ï Nous allons suivre l’approche MVC (Model View Controller).Ï Le but est d’animer un monde d’objets virtuels (balles, personnages, etc.).

Ï (1) Model Préciser le Modèle mathématique ou Monde : l’ensembleminimal des variables qui décrivent l’état des objets.

Ï La position (x,y) pour une balle se déplaçant au hasard.Ï L’angle polaire θ pour une balle tournant sur un cercle.Ï Un paramètre t pour une balle se dirigeant sur une trajectoire d’équation

paramétrique x(t), y(t).

Ï (2) Préciser comment le monde évolue à chaque top d’horloge.

Ï (3) View : préciser comment le monde sera transformé en une scène (imagerectangulaire) contenant des images : la Vue.

Ï (4) Controler Préciser (optionnellement) comment le monde va intéragir avec lescontrôles de l’utilisateur, via le clavier ou la souris.

39/54

Page 177: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Le modèle MVC Partie vii. Faire des animations

Ï Nous allons suivre l’approche MVC (Model View Controller).Ï Le but est d’animer un monde d’objets virtuels (balles, personnages, etc.).

Ï (1) Model Préciser le Modèle mathématique ou Monde : l’ensembleminimal des variables qui décrivent l’état des objets.

Ï La position (x,y) pour une balle se déplaçant au hasard.Ï L’angle polaire θ pour une balle tournant sur un cercle.Ï Un paramètre t pour une balle se dirigeant sur une trajectoire d’équation

paramétrique x(t), y(t).

Ï (2) Préciser comment le monde évolue à chaque top d’horloge.

Ï (3) View : préciser comment le monde sera transformé en une scène (imagerectangulaire) contenant des images : la Vue.

Ï (4) Controler Préciser (optionnellement) comment le monde va intéragir avec lescontrôles de l’utilisateur, via le clavier ou la souris.

39/54

Page 178: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Le modèle MVC Partie vii. Faire des animations

Ï Nous allons suivre l’approche MVC (Model View Controller).Ï Le but est d’animer un monde d’objets virtuels (balles, personnages, etc.).

Ï (1) Model Préciser le Modèle mathématique ou Monde : l’ensembleminimal des variables qui décrivent l’état des objets.

Ï La position (x,y) pour une balle se déplaçant au hasard.Ï L’angle polaire θ pour une balle tournant sur un cercle.Ï Un paramètre t pour une balle se dirigeant sur une trajectoire d’équation

paramétrique x(t), y(t).

Ï (2) Préciser comment le monde évolue à chaque top d’horloge.

Ï (3) View : préciser comment le monde sera transformé en une scène (imagerectangulaire) contenant des images : la Vue.

Ï (4) Controler Préciser (optionnellement) comment le monde va intéragir avec lescontrôles de l’utilisateur, via le clavier ou la souris.

39/54

Page 179: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Le modèle MVC Partie vii. Faire des animations

Ï Nous allons suivre l’approche MVC (Model View Controller).Ï Le but est d’animer un monde d’objets virtuels (balles, personnages, etc.).

Ï (1) Model Préciser le Modèle mathématique ou Monde : l’ensembleminimal des variables qui décrivent l’état des objets.

Ï La position (x,y) pour une balle se déplaçant au hasard.Ï L’angle polaire θ pour une balle tournant sur un cercle.Ï Un paramètre t pour une balle se dirigeant sur une trajectoire d’équation

paramétrique x(t), y(t).

Ï (2) Préciser comment le monde évolue à chaque top d’horloge.

Ï (3) View : préciser comment le monde sera transformé en une scène (imagerectangulaire) contenant des images : la Vue.

Ï (4) Controler Préciser (optionnellement) comment le monde va intéragir avec lescontrôles de l’utilisateur, via le clavier ou la souris.

39/54

Page 180: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Le modèle MVC Partie vii. Faire des animations

Ï Nous allons suivre l’approche MVC (Model View Controller).Ï Le but est d’animer un monde d’objets virtuels (balles, personnages, etc.).

Ï (1) Model Préciser le Modèle mathématique ou Monde : l’ensembleminimal des variables qui décrivent l’état des objets.

Ï La position (x,y) pour une balle se déplaçant au hasard.Ï L’angle polaire θ pour une balle tournant sur un cercle.Ï Un paramètre t pour une balle se dirigeant sur une trajectoire d’équation

paramétrique x(t), y(t).

Ï (2) Préciser comment le monde évolue à chaque top d’horloge.

Ï (3) View : préciser comment le monde sera transformé en une scène (imagerectangulaire) contenant des images : la Vue.

Ï (4) Controler Préciser (optionnellement) comment le monde va intéragir avec lescontrôles de l’utilisateur, via le clavier ou la souris.

39/54

Page 181: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Le modèle MVC Partie vii. Faire des animations

Ï Nous allons suivre l’approche MVC (Model View Controller).Ï Le but est d’animer un monde d’objets virtuels (balles, personnages, etc.).

Ï (1) Model Préciser le Modèle mathématique ou Monde : l’ensembleminimal des variables qui décrivent l’état des objets.

Ï La position (x,y) pour une balle se déplaçant au hasard.Ï L’angle polaire θ pour une balle tournant sur un cercle.Ï Un paramètre t pour une balle se dirigeant sur une trajectoire d’équation

paramétrique x(t), y(t).

Ï (2) Préciser comment le monde évolue à chaque top d’horloge.

Ï (3) View : préciser comment le monde sera transformé en une scène (imagerectangulaire) contenant des images : la Vue.

Ï (4) Controler Préciser (optionnellement) comment le monde va intéragir avec lescontrôles de l’utilisateur, via le clavier ou la souris.

39/54

Page 182: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Planter le décor Partie vii. Faire des animations

Ï Mise en place de la scène.Ï Une scène est une image rectangulaire.Ï Le fond sera une scène contenant les éléments fixes de l’animation.

LARG = 600HAUT = 200

def fond():background(255, 255, 255) # fond blancstroke(0, 0, 255) # stylo bleuline(LARG/2, 0, LARG/2, HAUT)# trait vertical au milieu

script

Ï Pour animer le mouvement d’un objet sur fond fixe :Ï on ajoutera l’image de cet objet aux coordonnées (x,y) de la scèneÏ ces coordonnées (x,y) évolueront légèrement à chaque image.

40/54

Page 183: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Planter le décor Partie vii. Faire des animations

Ï Mise en place de la scène.Ï Une scène est une image rectangulaire.Ï Le fond sera une scène contenant les éléments fixes de l’animation.

LARG = 600HAUT = 200

def fond():background(255, 255, 255) # fond blancstroke(0, 0, 255) # stylo bleuline(LARG/2, 0, LARG/2, HAUT)# trait vertical au milieu

script

Ï Pour animer le mouvement d’un objet sur fond fixe :Ï on ajoutera l’image de cet objet aux coordonnées (x,y) de la scèneÏ ces coordonnées (x,y) évolueront légèrement à chaque image.

40/54

Page 184: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Planter le décor Partie vii. Faire des animations

Ï Mise en place de la scène.Ï Une scène est une image rectangulaire.Ï Le fond sera une scène contenant les éléments fixes de l’animation.

LARG = 600HAUT = 200

def fond():background(255, 255, 255) # fond blancstroke(0, 0, 255) # stylo bleuline(LARG/2, 0, LARG/2, HAUT)# trait vertical au milieu

script

Ï Pour animer le mouvement d’un objet sur fond fixe :

Ï on ajoutera l’image de cet objet aux coordonnées (x,y) de la scèneÏ ces coordonnées (x,y) évolueront légèrement à chaque image.

40/54

Page 185: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Planter le décor Partie vii. Faire des animations

Ï Mise en place de la scène.Ï Une scène est une image rectangulaire.Ï Le fond sera une scène contenant les éléments fixes de l’animation.

LARG = 600HAUT = 200

def fond():background(255, 255, 255) # fond blancstroke(0, 0, 255) # stylo bleuline(LARG/2, 0, LARG/2, HAUT)# trait vertical au milieu

script

Ï Pour animer le mouvement d’un objet sur fond fixe :Ï on ajoutera l’image de cet objet aux coordonnées (x,y) de la scène

Ï ces coordonnées (x,y) évolueront légèrement à chaque image.

40/54

Page 186: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Planter le décor Partie vii. Faire des animations

Ï Mise en place de la scène.Ï Une scène est une image rectangulaire.Ï Le fond sera une scène contenant les éléments fixes de l’animation.

LARG = 600HAUT = 200

def fond():background(255, 255, 255) # fond blancstroke(0, 0, 255) # stylo bleuline(LARG/2, 0, LARG/2, HAUT)# trait vertical au milieu

script

Ï Pour animer le mouvement d’un objet sur fond fixe :Ï on ajoutera l’image de cet objet aux coordonnées (x,y) de la scèneÏ ces coordonnées (x,y) évolueront légèrement à chaque image.

40/54

Page 187: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Planter le décor Partie vii. Faire des animations

Ï Mise en place de la scène.Ï Une scène est une image rectangulaire.Ï Le fond sera une scène contenant les éléments fixes de l’animation.

LARG = 600HAUT = 200

def fond():background(255, 255, 255) # fond blancstroke(0, 0, 255) # stylo bleuline(LARG/2, 0, LARG/2, HAUT)# trait vertical au milieu

script

Ï Pour animer le mouvement d’un objet sur fond fixe :Ï on ajoutera l’image de cet objet aux coordonnées (x,y) de la scèneÏ ces coordonnées (x,y) évolueront légèrement à chaque image.

40/54

Page 188: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

L’état Partie vii. Faire des animations

Ï Nous allons animer une balle rouge :Ï qui oscille entre les murs gauche et droitÏ avec une vitesse nulle au rebond (une sorte de pendule horizontal).

Ï On ne traite pas du problème de la collision sur le mur.

Ï nous modéliserons la position du centre de la balle sous la forme d’unefonction périodique d’un seul paramètre réel t.

(x,y) = (LARG *(1 + sin(t))/2, HAUT/2)

Ï L’abscisse x varie entre 0 et LARG, tandis que l’ordonnée y est constante.

Ï Le monde sera réduit à la variable t.Ï Il suffit de connaître t pour tout afficher (le fond et la balle) !

41/54

Page 189: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

L’état Partie vii. Faire des animations

Ï Nous allons animer une balle rouge :Ï qui oscille entre les murs gauche et droitÏ avec une vitesse nulle au rebond (une sorte de pendule horizontal).

Ï On ne traite pas du problème de la collision sur le mur.

Ï nous modéliserons la position du centre de la balle sous la forme d’unefonction périodique d’un seul paramètre réel t.

(x,y) = (LARG *(1 + sin(t))/2, HAUT/2)

Ï L’abscisse x varie entre 0 et LARG, tandis que l’ordonnée y est constante.

Ï Le monde sera réduit à la variable t.Ï Il suffit de connaître t pour tout afficher (le fond et la balle) !

41/54

Page 190: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

L’état Partie vii. Faire des animations

Ï Nous allons animer une balle rouge :Ï qui oscille entre les murs gauche et droitÏ avec une vitesse nulle au rebond (une sorte de pendule horizontal).

Ï On ne traite pas du problème de la collision sur le mur.

Ï nous modéliserons la position du centre de la balle sous la forme d’unefonction périodique d’un seul paramètre réel t.

(x,y) = (LARG *(1 + sin(t))/2, HAUT/2)

Ï L’abscisse x varie entre 0 et LARG, tandis que l’ordonnée y est constante.

Ï Le monde sera réduit à la variable t.Ï Il suffit de connaître t pour tout afficher (le fond et la balle) !

41/54

Page 191: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

L’état Partie vii. Faire des animations

Ï Nous allons animer une balle rouge :Ï qui oscille entre les murs gauche et droitÏ avec une vitesse nulle au rebond (une sorte de pendule horizontal).

Ï On ne traite pas du problème de la collision sur le mur.

Ï nous modéliserons la position du centre de la balle sous la forme d’unefonction périodique d’un seul paramètre réel t.

(x,y) = (LARG *(1 + sin(t))/2, HAUT/2)

Ï L’abscisse x varie entre 0 et LARG, tandis que l’ordonnée y est constante.

Ï Le monde sera réduit à la variable t.Ï Il suffit de connaître t pour tout afficher (le fond et la balle) !

41/54

Page 192: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

L’état Partie vii. Faire des animations

Ï Nous allons animer une balle rouge :Ï qui oscille entre les murs gauche et droitÏ avec une vitesse nulle au rebond (une sorte de pendule horizontal).

Ï On ne traite pas du problème de la collision sur le mur.

Ï nous modéliserons la position du centre de la balle sous la forme d’unefonction périodique d’un seul paramètre réel t.

(x,y) = (LARG *(1 + sin(t))/2, HAUT/2)

Ï L’abscisse x varie entre 0 et LARG, tandis que l’ordonnée y est constante.

Ï Le monde sera réduit à la variable t.Ï Il suffit de connaître t pour tout afficher (le fond et la balle) !

41/54

Page 193: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

L’évolution du monde Partie vii. Faire des animations

Ï La mise à jour du monde. Étant donné un monde M (ensemble desvariables), quel est le monde suivant (au prochain top d’horloge) ?

Ï On a discrétisé la fonction d’abscisse x(t). On ne calcule pas en continu,mais par pas discrets de 0.1 :

def suivant(t): # monde −−−> mondereturn t + 0.1

script

42/54

Page 194: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

L’évolution du monde Partie vii. Faire des animations

Ï La mise à jour du monde. Étant donné un monde M (ensemble desvariables), quel est le monde suivant (au prochain top d’horloge) ?

Ï On a discrétisé la fonction d’abscisse x(t). On ne calcule pas en continu,mais par pas discrets de 0.1 :

def suivant(t): # monde −−−> mondereturn t + 0.1

script

42/54

Page 195: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Afficher l’état Partie vii. Faire des animations

Ï L’affichage du monde. Étant donné un monde M, comment le transformeren une scène pour le visualiser ?

def dessine(t): # dessine le mondefond() # on dessine le fondfill(255, 0, 0, 40) # pinceau rouge transparentnoStroke() # on ne trace pas les contours(x,y) = (LARG * (1 + sin(t)) / 2, HAUT / 2)ellipseMode(CENTER)ellipse(x, y, RBALLE, RBALLE) # dessin de la balle

script

Ï On ne décrit pas l’animation par une boucle, on exprime seulement dansdes fonctions séparées

Ï comment le monde évolue,Ï comment il se visualise de manière statique à un moment donné.

Ï Il reste à voir comment va s’organiser la simulation dans le temps.

43/54

Page 196: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Afficher l’état Partie vii. Faire des animations

Ï L’affichage du monde. Étant donné un monde M, comment le transformeren une scène pour le visualiser ?

def dessine(t): # dessine le mondefond() # on dessine le fondfill(255, 0, 0, 40) # pinceau rouge transparentnoStroke() # on ne trace pas les contours(x,y) = (LARG * (1 + sin(t)) / 2, HAUT / 2)ellipseMode(CENTER)ellipse(x, y, RBALLE, RBALLE) # dessin de la balle

script

Ï On ne décrit pas l’animation par une boucle, on exprime seulement dansdes fonctions séparées

Ï comment le monde évolue,Ï comment il se visualise de manière statique à un moment donné.

Ï Il reste à voir comment va s’organiser la simulation dans le temps.

43/54

Page 197: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Afficher l’état Partie vii. Faire des animations

Ï L’affichage du monde. Étant donné un monde M, comment le transformeren une scène pour le visualiser ?

def dessine(t): # dessine le mondefond() # on dessine le fondfill(255, 0, 0, 40) # pinceau rouge transparentnoStroke() # on ne trace pas les contours(x,y) = (LARG * (1 + sin(t)) / 2, HAUT / 2)ellipseMode(CENTER)ellipse(x, y, RBALLE, RBALLE) # dessin de la balle

script

Ï On ne décrit pas l’animation par une boucle, on exprime seulement dansdes fonctions séparées

Ï comment le monde évolue,Ï comment il se visualise de manière statique à un moment donné.

Ï Il reste à voir comment va s’organiser la simulation dans le temps.

43/54

Page 198: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Afficher l’état Partie vii. Faire des animations

Ï L’affichage du monde. Étant donné un monde M, comment le transformeren une scène pour le visualiser ?

def dessine(t): # dessine le mondefond() # on dessine le fondfill(255, 0, 0, 40) # pinceau rouge transparentnoStroke() # on ne trace pas les contours(x,y) = (LARG * (1 + sin(t)) / 2, HAUT / 2)ellipseMode(CENTER)ellipse(x, y, RBALLE, RBALLE) # dessin de la balle

script

Ï On ne décrit pas l’animation par une boucle, on exprime seulement dansdes fonctions séparées

Ï comment le monde évolue,Ï comment il se visualise de manière statique à un moment donné.

Ï Il reste à voir comment va s’organiser la simulation dans le temps.

43/54

Page 199: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Ô temps! suspends ton vol… Partie vii. Faire des animations

Ï Une horloge bat le tempo de manière régulière à une certaine fréquence.

Ï À chaque top d’horloge, on affiche l’état et on le fait évoluer.

Ï Pour les appeler, on les place dans la fonction réservée draw.

Ï Dans la fonction réservée setup, on initialise le monde et on fixe lafréquence d’horloge.

def setup():global t # le monde est une variable globalet = 0 # valeur initiale du mondesize(LARG, HAUT) # dimensions : obligatoire avant dessinFREQ = 28 # nombre d'appels à draw par seconde

def draw():global tdessine(t) # On affiche l’étatt = suivant(t) # On le fait évoluer

script

44/54

Page 200: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Ô temps! suspends ton vol… Partie vii. Faire des animations

Ï Une horloge bat le tempo de manière régulière à une certaine fréquence.

Ï À chaque top d’horloge, on affiche l’état et on le fait évoluer.

Ï Pour les appeler, on les place dans la fonction réservée draw.

Ï Dans la fonction réservée setup, on initialise le monde et on fixe lafréquence d’horloge.

def setup():global t # le monde est une variable globalet = 0 # valeur initiale du mondesize(LARG, HAUT) # dimensions : obligatoire avant dessinFREQ = 28 # nombre d'appels à draw par seconde

def draw():global tdessine(t) # On affiche l’étatt = suivant(t) # On le fait évoluer

script

44/54

Page 201: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Ô temps! suspends ton vol… Partie vii. Faire des animations

Ï Une horloge bat le tempo de manière régulière à une certaine fréquence.

Ï À chaque top d’horloge, on affiche l’état et on le fait évoluer.

Ï Pour les appeler, on les place dans la fonction réservée draw.

Ï Dans la fonction réservée setup, on initialise le monde et on fixe lafréquence d’horloge.

def setup():global t # le monde est une variable globalet = 0 # valeur initiale du mondesize(LARG, HAUT) # dimensions : obligatoire avant dessinFREQ = 28 # nombre d'appels à draw par seconde

def draw():global tdessine(t) # On affiche l’étatt = suivant(t) # On le fait évoluer

script

44/54

Page 202: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Ô temps! suspends ton vol… Partie vii. Faire des animations

Ï Une horloge bat le tempo de manière régulière à une certaine fréquence.

Ï À chaque top d’horloge, on affiche l’état et on le fait évoluer.

Ï Pour les appeler, on les place dans la fonction réservée draw.

Ï Dans la fonction réservée setup, on initialise le monde et on fixe lafréquence d’horloge.

def setup():global t # le monde est une variable globalet = 0 # valeur initiale du mondesize(LARG, HAUT) # dimensions : obligatoire avant dessinFREQ = 28 # nombre d'appels à draw par seconde

def draw():global tdessine(t) # On affiche l’étatt = suivant(t) # On le fait évoluer

script

44/54

Page 203: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Ô temps! suspends ton vol… Partie vii. Faire des animations

Ï Une horloge bat le tempo de manière régulière à une certaine fréquence.

Ï À chaque top d’horloge, on affiche l’état et on le fait évoluer.

Ï Pour les appeler, on les place dans la fonction réservée draw.

Ï Dans la fonction réservée setup, on initialise le monde et on fixe lafréquence d’horloge.

def setup():global t # le monde est une variable globalet = 0 # valeur initiale du mondesize(LARG, HAUT) # dimensions : obligatoire avant dessinFREQ = 28 # nombre d'appels à draw par seconde

def draw():global tdessine(t) # On affiche l’étatt = suivant(t) # On le fait évoluer

script

44/54

Page 204: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Un autre exemple (1/2) Partie vii. Faire des animations

Ï On souhaite afficher un compte à rebours.

−→ −→ −→ … −→

Ï Quel est le monde? Prenons n, le nombre d’images restant à afficher.

Ï Comment met-on à jour le monde?

def suivant(n):return n - 1

script

Ï Comment affiche-t-on le monde?

def dessine(n):background(255, 255, 0) #fond jaunefill(255, 0, 0) #stylo rouget = float(n) / FREQ #n/FREQ suffirait en Python 3textSize(HAUT / 3) # en Processing 3/2 == 1textAlign(CENTER) # et 3.0 / 2 == 1.5text(str(t)[:3],LARG/2,HAUT/2) #pour 1 seule décimale

script

45/54

Page 205: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Un autre exemple (1/2) Partie vii. Faire des animations

Ï On souhaite afficher un compte à rebours.

−→ −→ −→ … −→

Ï Quel est le monde?

Prenons n, le nombre d’images restant à afficher.

Ï Comment met-on à jour le monde?

def suivant(n):return n - 1

script

Ï Comment affiche-t-on le monde?

def dessine(n):background(255, 255, 0) #fond jaunefill(255, 0, 0) #stylo rouget = float(n) / FREQ #n/FREQ suffirait en Python 3textSize(HAUT / 3) # en Processing 3/2 == 1textAlign(CENTER) # et 3.0 / 2 == 1.5text(str(t)[:3],LARG/2,HAUT/2) #pour 1 seule décimale

script

45/54

Page 206: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Un autre exemple (1/2) Partie vii. Faire des animations

Ï On souhaite afficher un compte à rebours.

−→ −→ −→ … −→

Ï Quel est le monde? Prenons n, le nombre d’images restant à afficher.

Ï Comment met-on à jour le monde?

def suivant(n):return n - 1

script

Ï Comment affiche-t-on le monde?

def dessine(n):background(255, 255, 0) #fond jaunefill(255, 0, 0) #stylo rouget = float(n) / FREQ #n/FREQ suffirait en Python 3textSize(HAUT / 3) # en Processing 3/2 == 1textAlign(CENTER) # et 3.0 / 2 == 1.5text(str(t)[:3],LARG/2,HAUT/2) #pour 1 seule décimale

script

45/54

Page 207: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Un autre exemple (1/2) Partie vii. Faire des animations

Ï On souhaite afficher un compte à rebours.

−→ −→ −→ … −→

Ï Quel est le monde? Prenons n, le nombre d’images restant à afficher.

Ï Comment met-on à jour le monde?

def suivant(n):return n - 1

script

Ï Comment affiche-t-on le monde?

def dessine(n):background(255, 255, 0) #fond jaunefill(255, 0, 0) #stylo rouget = float(n) / FREQ #n/FREQ suffirait en Python 3textSize(HAUT / 3) # en Processing 3/2 == 1textAlign(CENTER) # et 3.0 / 2 == 1.5text(str(t)[:3],LARG/2,HAUT/2) #pour 1 seule décimale

script

45/54

Page 208: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Un autre exemple (1/2) Partie vii. Faire des animations

Ï On souhaite afficher un compte à rebours.

−→ −→ −→ … −→

Ï Quel est le monde? Prenons n, le nombre d’images restant à afficher.

Ï Comment met-on à jour le monde?

def suivant(n):return n - 1

script

Ï Comment affiche-t-on le monde?

def dessine(n):background(255, 255, 0) #fond jaunefill(255, 0, 0) #stylo rouget = float(n) / FREQ #n/FREQ suffirait en Python 3textSize(HAUT / 3) # en Processing 3/2 == 1textAlign(CENTER) # et 3.0 / 2 == 1.5text(str(t)[:3],LARG/2,HAUT/2) #pour 1 seule décimale

script

45/54

Page 209: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Un autre exemple (1/2) Partie vii. Faire des animations

Ï On souhaite afficher un compte à rebours.

−→ −→ −→ … −→

Ï Quel est le monde? Prenons n, le nombre d’images restant à afficher.

Ï Comment met-on à jour le monde?

def suivant(n):return n - 1

script

Ï Comment affiche-t-on le monde?

def dessine(n):background(255, 255, 0) #fond jaunefill(255, 0, 0) #stylo rouget = float(n) / FREQ #n/FREQ suffirait en Python 3textSize(HAUT / 3) # en Processing 3/2 == 1textAlign(CENTER) # et 3.0 / 2 == 1.5text(str(t)[:3],LARG/2,HAUT/2) #pour 1 seule décimale

script

45/54

Page 210: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Un autre exemple (1/2) Partie vii. Faire des animations

Ï On souhaite afficher un compte à rebours.

−→ −→ −→ … −→

Ï Quel est le monde? Prenons n, le nombre d’images restant à afficher.

Ï Comment met-on à jour le monde?

def suivant(n):return n - 1

script

Ï Comment affiche-t-on le monde?

def dessine(n):background(255, 255, 0) #fond jaunefill(255, 0, 0) #stylo rouget = float(n) / FREQ #n/FREQ suffirait en Python 3textSize(HAUT / 3) # en Processing 3/2 == 1textAlign(CENTER) # et 3.0 / 2 == 1.5text(str(t)[:3],LARG/2,HAUT/2) #pour 1 seule décimale

script

45/54

Page 211: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Un autre exemple (2/2) Partie vii. Faire des animations

LARG = 800HAUT = 800FREQ = 28

def suivant(n):return n - 1

def dessine(n):background(255, 255, 0)fill(255, 0, 0)t = float(n) / FREQtextSize(HAUT / 3)textAlign(CENTER)st=str(t)[:3]text(st, LARG/2,HAUT/2)

script

def setup():global nsize(LARG, HAUT)n = 10 * FREQ

# valeur initiale# du monde

frameRate(FREQ)

def draw():global ndessine(n)n = suivant(n)if n < 0:

noLoop()

script

Ï noLoop() permet d’arrêter d’appeler draw à chaque top d’horloge.

46/54

Page 212: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Un autre exemple (2/2) Partie vii. Faire des animations

LARG = 800HAUT = 800FREQ = 28

def suivant(n):return n - 1

def dessine(n):background(255, 255, 0)fill(255, 0, 0)t = float(n) / FREQtextSize(HAUT / 3)textAlign(CENTER)st=str(t)[:3]text(st, LARG/2,HAUT/2)

script def setup():global nsize(LARG, HAUT)n = 10 * FREQ

# valeur initiale# du monde

frameRate(FREQ)

def draw():global ndessine(n)n = suivant(n)if n < 0:

noLoop()

script

Ï noLoop() permet d’arrêter d’appeler draw à chaque top d’horloge.

46/54

Page 213: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Un autre exemple (2/2) Partie vii. Faire des animations

LARG = 800HAUT = 800FREQ = 28

def suivant(n):return n - 1

def dessine(n):background(255, 255, 0)fill(255, 0, 0)t = float(n) / FREQtextSize(HAUT / 3)textAlign(CENTER)st=str(t)[:3]text(st, LARG/2,HAUT/2)

script def setup():global nsize(LARG, HAUT)n = 10 * FREQ

# valeur initiale# du monde

frameRate(FREQ)

def draw():global ndessine(n)n = suivant(n)if n < 0:

noLoop()

script

Ï noLoop() permet d’arrêter d’appeler draw à chaque top d’horloge.

46/54

Page 214: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Sommaire

f Partie i. Annonces

f Partie ii. Du graphisme en programmation

f Partie iii. Déplacements Absolus

f Partie iv. Déplacement relatif

f Partie v. Variables locales/globales

f Partie vi. Processing

f Partie vii. Faire des animations

f Partie viii. Gestion du clavier

f Partie ix. Table des matières47/54

Page 215: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

La fonction keypressed Partie viii. Gestion du clavier

Ï Pour gérer des évènements clavier : il faut définir la fonction réservéekeyPressed

Ï Par exemple, on veut afficher un compteur :Ï qu’on incrémente en appuyant sur +Ï qu’on décrémente en appuyant sur ← (flèche du clavier)Ï et qu’on remet à 0 avec toute autre touche.

Ï Voici le code (complet !).

def keyPressed():global nif key == '+':

n = n + 1elif keyCode == LEFT:

n = n - 1else:

n = 0

script

�setup et draw sont obligatoires.

def setup():global nsize(100, 100)n = 0

def draw():global nbackground(255, 255, 0)fill(255, 0, 0)text(str(n), 50, 50)

script

48/54

Page 216: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

La fonction keypressed Partie viii. Gestion du clavier

Ï Pour gérer des évènements clavier : il faut définir la fonction réservéekeyPressed

Ï Par exemple, on veut afficher un compteur :

Ï qu’on incrémente en appuyant sur +Ï qu’on décrémente en appuyant sur ← (flèche du clavier)Ï et qu’on remet à 0 avec toute autre touche.

Ï Voici le code (complet !).

def keyPressed():global nif key == '+':

n = n + 1elif keyCode == LEFT:

n = n - 1else:

n = 0

script

�setup et draw sont obligatoires.

def setup():global nsize(100, 100)n = 0

def draw():global nbackground(255, 255, 0)fill(255, 0, 0)text(str(n), 50, 50)

script

48/54

Page 217: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

La fonction keypressed Partie viii. Gestion du clavier

Ï Pour gérer des évènements clavier : il faut définir la fonction réservéekeyPressed

Ï Par exemple, on veut afficher un compteur :Ï qu’on incrémente en appuyant sur +

Ï qu’on décrémente en appuyant sur ← (flèche du clavier)Ï et qu’on remet à 0 avec toute autre touche.

Ï Voici le code (complet !).

def keyPressed():global nif key == '+':

n = n + 1elif keyCode == LEFT:

n = n - 1else:

n = 0

script

�setup et draw sont obligatoires.

def setup():global nsize(100, 100)n = 0

def draw():global nbackground(255, 255, 0)fill(255, 0, 0)text(str(n), 50, 50)

script

48/54

Page 218: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

La fonction keypressed Partie viii. Gestion du clavier

Ï Pour gérer des évènements clavier : il faut définir la fonction réservéekeyPressed

Ï Par exemple, on veut afficher un compteur :Ï qu’on incrémente en appuyant sur +Ï qu’on décrémente en appuyant sur ← (flèche du clavier)

Ï et qu’on remet à 0 avec toute autre touche.

Ï Voici le code (complet !).

def keyPressed():global nif key == '+':

n = n + 1elif keyCode == LEFT:

n = n - 1else:

n = 0

script

�setup et draw sont obligatoires.

def setup():global nsize(100, 100)n = 0

def draw():global nbackground(255, 255, 0)fill(255, 0, 0)text(str(n), 50, 50)

script

48/54

Page 219: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

La fonction keypressed Partie viii. Gestion du clavier

Ï Pour gérer des évènements clavier : il faut définir la fonction réservéekeyPressed

Ï Par exemple, on veut afficher un compteur :Ï qu’on incrémente en appuyant sur +Ï qu’on décrémente en appuyant sur ← (flèche du clavier)Ï et qu’on remet à 0 avec toute autre touche.

Ï Voici le code (complet !).

def keyPressed():global nif key == '+':

n = n + 1elif keyCode == LEFT:

n = n - 1else:

n = 0

script

�setup et draw sont obligatoires.

def setup():global nsize(100, 100)n = 0

def draw():global nbackground(255, 255, 0)fill(255, 0, 0)text(str(n), 50, 50)

script

48/54

Page 220: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

La fonction keypressed Partie viii. Gestion du clavier

Ï Pour gérer des évènements clavier : il faut définir la fonction réservéekeyPressed

Ï Par exemple, on veut afficher un compteur :Ï qu’on incrémente en appuyant sur +Ï qu’on décrémente en appuyant sur ← (flèche du clavier)Ï et qu’on remet à 0 avec toute autre touche.

Ï Voici le code (complet !).

def keyPressed():global nif key == '+':

n = n + 1elif keyCode == LEFT:

n = n - 1else:

n = 0

script

�setup et draw sont obligatoires.

def setup():global nsize(100, 100)n = 0

def draw():global nbackground(255, 255, 0)fill(255, 0, 0)text(str(n), 50, 50)

script

48/54

Page 221: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

La fonction keypressed Partie viii. Gestion du clavier

Ï Pour gérer des évènements clavier : il faut définir la fonction réservéekeyPressed

Ï Par exemple, on veut afficher un compteur :Ï qu’on incrémente en appuyant sur +Ï qu’on décrémente en appuyant sur ← (flèche du clavier)Ï et qu’on remet à 0 avec toute autre touche.

Ï Voici le code (complet !).

def keyPressed():global nif key == '+':

n = n + 1elif keyCode == LEFT:

n = n - 1else:

n = 0

script

�setup et draw sont obligatoires.

def setup():global nsize(100, 100)n = 0

def draw():global nbackground(255, 255, 0)fill(255, 0, 0)text(str(n), 50, 50)

script

48/54

Page 222: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Retour vers le futur Partie viii. Gestion du clavier

Reprenons le pendule horizontal.

Ï On souhaite pouvoir inverser la flèche du temps en appuyant au clavier.

Ï On a donc deux dynamiques, normale et à rebours

Ï On passe de l’une à l’autre en appuyant sur le clavier

dynamique normale dynamique à rebours

49/54

Page 223: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Retour vers le futur Partie viii. Gestion du clavier

Reprenons le pendule horizontal.

Ï On souhaite pouvoir inverser la flèche du temps en appuyant au clavier.

Ï On a donc deux dynamiques, normale et à rebours

Ï On passe de l’une à l’autre en appuyant sur le clavier

dynamique normale dynamique à rebours

49/54

Page 224: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Retour vers le futur Partie viii. Gestion du clavier

Reprenons le pendule horizontal.

Ï On souhaite pouvoir inverser la flèche du temps en appuyant au clavier.

Ï On a donc deux dynamiques, normale et à rebours

Ï On passe de l’une à l’autre en appuyant sur le clavier

dynamique normale dynamique à rebours

49/54

Page 225: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Retour vers le futur Partie viii. Gestion du clavier

Reprenons le pendule horizontal.

Ï On souhaite pouvoir inverser la flèche du temps en appuyant au clavier.

Ï On a donc deux dynamiques, normale et à rebours

Ï On passe de l’une à l’autre en appuyant sur le clavier

dynamique normale dynamique à rebours

49/54

Page 226: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Retour vers le futur Partie viii. Gestion du clavier

Reprenons le pendule horizontal.

Ï On souhaite pouvoir inverser la flèche du temps en appuyant au clavier.

Ï On a donc deux dynamiques, normale et à rebours

Ï On passe de l’une à l’autre en appuyant sur le clavier

dynamique normale dynamique à rebours

49/54

Page 227: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Quel est le monde? Partie viii. Gestion du clavier

Ï Analysons le problème :

Ï il faut connaître t pour dessiner la balle,Ï il faut connaître la dynamique pour savoir comment mettre t à jour,Ï il faut pouvoir modifier la dynamique en pressant le clavier.

Ï Conclusion : le monde est déterminé par le couple (t,dynamique).

Ï Comment représenter la dynamique?

def suivant(monde):(t,enAvant) = mondeif enAvant:

t = t + 0.1else:

t = t - 0.1return (t,enAvant)

script

Solution 1 : un booléenkeyPressed() inverse le booléen enAvant.

def suivant(monde):(t,dt) = mondereturn (t+dt)

script

Solution 2 : un flottantkeyPressed() envoie dt sur -dt.

50/54

Page 228: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Quel est le monde? Partie viii. Gestion du clavier

Ï Analysons le problème :Ï il faut connaître t pour dessiner la balle,

Ï il faut connaître la dynamique pour savoir comment mettre t à jour,Ï il faut pouvoir modifier la dynamique en pressant le clavier.

Ï Conclusion : le monde est déterminé par le couple (t,dynamique).

Ï Comment représenter la dynamique?

def suivant(monde):(t,enAvant) = mondeif enAvant:

t = t + 0.1else:

t = t - 0.1return (t,enAvant)

script

Solution 1 : un booléenkeyPressed() inverse le booléen enAvant.

def suivant(monde):(t,dt) = mondereturn (t+dt)

script

Solution 2 : un flottantkeyPressed() envoie dt sur -dt.

50/54

Page 229: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Quel est le monde? Partie viii. Gestion du clavier

Ï Analysons le problème :Ï il faut connaître t pour dessiner la balle,Ï il faut connaître la dynamique pour savoir comment mettre t à jour,

Ï il faut pouvoir modifier la dynamique en pressant le clavier.

Ï Conclusion : le monde est déterminé par le couple (t,dynamique).

Ï Comment représenter la dynamique?

def suivant(monde):(t,enAvant) = mondeif enAvant:

t = t + 0.1else:

t = t - 0.1return (t,enAvant)

script

Solution 1 : un booléenkeyPressed() inverse le booléen enAvant.

def suivant(monde):(t,dt) = mondereturn (t+dt)

script

Solution 2 : un flottantkeyPressed() envoie dt sur -dt.

50/54

Page 230: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Quel est le monde? Partie viii. Gestion du clavier

Ï Analysons le problème :Ï il faut connaître t pour dessiner la balle,Ï il faut connaître la dynamique pour savoir comment mettre t à jour,Ï il faut pouvoir modifier la dynamique en pressant le clavier.

Ï Conclusion : le monde est déterminé par le couple (t,dynamique).

Ï Comment représenter la dynamique?

def suivant(monde):(t,enAvant) = mondeif enAvant:

t = t + 0.1else:

t = t - 0.1return (t,enAvant)

script

Solution 1 : un booléenkeyPressed() inverse le booléen enAvant.

def suivant(monde):(t,dt) = mondereturn (t+dt)

script

Solution 2 : un flottantkeyPressed() envoie dt sur -dt.

50/54

Page 231: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Quel est le monde? Partie viii. Gestion du clavier

Ï Analysons le problème :Ï il faut connaître t pour dessiner la balle,Ï il faut connaître la dynamique pour savoir comment mettre t à jour,Ï il faut pouvoir modifier la dynamique en pressant le clavier.

Ï Conclusion : le monde est déterminé par le couple (t,dynamique).

Ï Comment représenter la dynamique?

def suivant(monde):(t,enAvant) = mondeif enAvant:

t = t + 0.1else:

t = t - 0.1return (t,enAvant)

script

Solution 1 : un booléenkeyPressed() inverse le booléen enAvant.

def suivant(monde):(t,dt) = mondereturn (t+dt)

script

Solution 2 : un flottantkeyPressed() envoie dt sur -dt.

50/54

Page 232: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Quel est le monde? Partie viii. Gestion du clavier

Ï Analysons le problème :Ï il faut connaître t pour dessiner la balle,Ï il faut connaître la dynamique pour savoir comment mettre t à jour,Ï il faut pouvoir modifier la dynamique en pressant le clavier.

Ï Conclusion : le monde est déterminé par le couple (t,dynamique).

Ï Comment représenter la dynamique?

def suivant(monde):(t,enAvant) = mondeif enAvant:

t = t + 0.1else:

t = t - 0.1return (t,enAvant)

script

Solution 1 : un booléenkeyPressed() inverse le booléen enAvant.

def suivant(monde):(t,dt) = mondereturn (t+dt)

script

Solution 2 : un flottantkeyPressed() envoie dt sur -dt.

50/54

Page 233: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Quel est le monde? Partie viii. Gestion du clavier

Ï Analysons le problème :Ï il faut connaître t pour dessiner la balle,Ï il faut connaître la dynamique pour savoir comment mettre t à jour,Ï il faut pouvoir modifier la dynamique en pressant le clavier.

Ï Conclusion : le monde est déterminé par le couple (t,dynamique).

Ï Comment représenter la dynamique?

def suivant(monde):(t,enAvant) = mondeif enAvant:

t = t + 0.1else:

t = t - 0.1return (t,enAvant)

script

Solution 1 : un booléenkeyPressed() inverse le booléen enAvant.

def suivant(monde):(t,dt) = mondereturn (t+dt)

script

Solution 2 : un flottantkeyPressed() envoie dt sur -dt.

50/54

Page 234: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Quel est le monde? Partie viii. Gestion du clavier

Ï Analysons le problème :Ï il faut connaître t pour dessiner la balle,Ï il faut connaître la dynamique pour savoir comment mettre t à jour,Ï il faut pouvoir modifier la dynamique en pressant le clavier.

Ï Conclusion : le monde est déterminé par le couple (t,dynamique).

Ï Comment représenter la dynamique?

def suivant(monde):(t,enAvant) = mondeif enAvant:

t = t + 0.1else:

t = t - 0.1return (t,enAvant)

script

Solution 1 : un booléenkeyPressed() inverse le booléen enAvant.

def suivant(monde):(t,dt) = mondereturn (t+dt)

script

Solution 2 : un flottantkeyPressed() envoie dt sur -dt.

50/54

Page 235: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Dessin à main levée à la souris Partie viii. Gestion du clavier

Pour aborder la gestion de la souris, penchons-noussur cette animation (certes, plutôt une application)avec nos lunettes Modèle-Vue-Contrôle.

Nous avons accès à des fonctions() et des variables.

Œuvre de J.-P. Roy

Ï Où la souris se trouve-t-elle ?Ï mouseX Ï mouseY

Ï la souris est-elle pressée?Ï mousePressed Ï mousePressed()Ï mouseReleased()

Ï la souris a-t-elle été déplacée?Ï mouseMoved() Ï mouseDragged()

51/54

Page 236: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Dessin à main levée à la souris Partie viii. Gestion du clavier

Pour aborder la gestion de la souris, penchons-noussur cette animation (certes, plutôt une application)avec nos lunettes Modèle-Vue-Contrôle.Nous avons accès à des fonctions() et des variables.

Œuvre de J.-P. Roy

Ï Où la souris se trouve-t-elle ?Ï mouseX Ï mouseY

Ï la souris est-elle pressée?Ï mousePressed Ï mousePressed()Ï mouseReleased()

Ï la souris a-t-elle été déplacée?Ï mouseMoved() Ï mouseDragged()

51/54

Page 237: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Dessin à main levée à la souris Partie viii. Gestion du clavier

Pour aborder la gestion de la souris, penchons-noussur cette animation (certes, plutôt une application)avec nos lunettes Modèle-Vue-Contrôle.Nous avons accès à des fonctions() et des variables.

Œuvre de J.-P. RoyÏ Où la souris se trouve-t-elle ?

Ï mouseX Ï mouseY

Ï la souris est-elle pressée?Ï mousePressed Ï mousePressed()Ï mouseReleased()

Ï la souris a-t-elle été déplacée?Ï mouseMoved() Ï mouseDragged()

51/54

Page 238: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Dessin à main levée à la souris Partie viii. Gestion du clavier

Pour aborder la gestion de la souris, penchons-noussur cette animation (certes, plutôt une application)avec nos lunettes Modèle-Vue-Contrôle.Nous avons accès à des fonctions() et des variables.

Œuvre de J.-P. RoyÏ Où la souris se trouve-t-elle ?Ï mouseX Ï mouseY

Ï la souris est-elle pressée?Ï mousePressed Ï mousePressed()Ï mouseReleased()

Ï la souris a-t-elle été déplacée?Ï mouseMoved() Ï mouseDragged()

51/54

Page 239: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Dessin à main levée à la souris Partie viii. Gestion du clavier

Pour aborder la gestion de la souris, penchons-noussur cette animation (certes, plutôt une application)avec nos lunettes Modèle-Vue-Contrôle.Nous avons accès à des fonctions() et des variables.

Œuvre de J.-P. RoyÏ Où la souris se trouve-t-elle ?Ï mouseX Ï mouseY

Ï la souris est-elle pressée?

Ï mousePressed Ï mousePressed()Ï mouseReleased()

Ï la souris a-t-elle été déplacée?Ï mouseMoved() Ï mouseDragged()

51/54

Page 240: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Dessin à main levée à la souris Partie viii. Gestion du clavier

Pour aborder la gestion de la souris, penchons-noussur cette animation (certes, plutôt une application)avec nos lunettes Modèle-Vue-Contrôle.Nous avons accès à des fonctions() et des variables.

Œuvre de J.-P. RoyÏ Où la souris se trouve-t-elle ?Ï mouseX Ï mouseY

Ï la souris est-elle pressée?Ï mousePressed Ï mousePressed()Ï mouseReleased()

Ï la souris a-t-elle été déplacée?Ï mouseMoved() Ï mouseDragged()

51/54

Page 241: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Dessin à main levée à la souris Partie viii. Gestion du clavier

Pour aborder la gestion de la souris, penchons-noussur cette animation (certes, plutôt une application)avec nos lunettes Modèle-Vue-Contrôle.Nous avons accès à des fonctions() et des variables.

Œuvre de J.-P. RoyÏ Où la souris se trouve-t-elle ?Ï mouseX Ï mouseY

Ï la souris est-elle pressée?Ï mousePressed Ï mousePressed()Ï mouseReleased()

Ï la souris a-t-elle été déplacée?

Ï mouseMoved() Ï mouseDragged()

51/54

Page 242: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Dessin à main levée à la souris Partie viii. Gestion du clavier

Pour aborder la gestion de la souris, penchons-noussur cette animation (certes, plutôt une application)avec nos lunettes Modèle-Vue-Contrôle.Nous avons accès à des fonctions() et des variables.

Œuvre de J.-P. RoyÏ Où la souris se trouve-t-elle ?Ï mouseX Ï mouseY

Ï la souris est-elle pressée?Ï mousePressed Ï mousePressed()Ï mouseReleased()

Ï la souris a-t-elle été déplacée?Ï mouseMoved() Ï mouseDragged()

51/54

Page 243: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Quel est le monde? Partie viii. Gestion du clavier

Remarque : si on doit redessiner l’image en entier àchaque fois, le monde doit contenir de quoirecalculer l’image. C’est possible (voir exercice TP 5).

Ï La fonction dessiner(m) ajoutera des traits, mais n’effacera pas l’image.

Ï La question subsiste : quel est le monde pour cette animation?

Ï Voici les deux principes du dessin à main levée :Ï à chaque fois que la souris est pressée, on ajoute un trait entre la position

précédente de la souris, notée (px,py) et la nouvelle position(mouseX,mouseY),

Ï à chaque fois que la souris est déplacée, on actualise (px,py) etéventuellement le dessin (dans quel ordre?).

Ï Le monde est la position (px,py).

52/54

Page 244: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Quel est le monde? Partie viii. Gestion du clavier

Remarque : si on doit redessiner l’image en entier àchaque fois, le monde doit contenir de quoirecalculer l’image. C’est possible (voir exercice TP 5).

Ï La fonction dessiner(m) ajoutera des traits, mais n’effacera pas l’image.

Ï La question subsiste : quel est le monde pour cette animation?

Ï Voici les deux principes du dessin à main levée :Ï à chaque fois que la souris est pressée, on ajoute un trait entre la position

précédente de la souris, notée (px,py) et la nouvelle position(mouseX,mouseY),

Ï à chaque fois que la souris est déplacée, on actualise (px,py) etéventuellement le dessin (dans quel ordre?).

Ï Le monde est la position (px,py).

52/54

Page 245: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Quel est le monde? Partie viii. Gestion du clavier

Remarque : si on doit redessiner l’image en entier àchaque fois, le monde doit contenir de quoirecalculer l’image. C’est possible (voir exercice TP 5).

Ï La fonction dessiner(m) ajoutera des traits, mais n’effacera pas l’image.

Ï La question subsiste : quel est le monde pour cette animation?

Ï Voici les deux principes du dessin à main levée :Ï à chaque fois que la souris est pressée, on ajoute un trait entre la position

précédente de la souris, notée (px,py) et la nouvelle position(mouseX,mouseY),

Ï à chaque fois que la souris est déplacée, on actualise (px,py) etéventuellement le dessin (dans quel ordre?).

Ï Le monde est la position (px,py).

52/54

Page 246: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Quel est le monde? Partie viii. Gestion du clavier

Remarque : si on doit redessiner l’image en entier àchaque fois, le monde doit contenir de quoirecalculer l’image. C’est possible (voir exercice TP 5).

Ï La fonction dessiner(m) ajoutera des traits, mais n’effacera pas l’image.

Ï La question subsiste : quel est le monde pour cette animation?

Ï Voici les deux principes du dessin à main levée :

Ï à chaque fois que la souris est pressée, on ajoute un trait entre la positionprécédente de la souris, notée (px,py) et la nouvelle position(mouseX,mouseY),

Ï à chaque fois que la souris est déplacée, on actualise (px,py) etéventuellement le dessin (dans quel ordre?).

Ï Le monde est la position (px,py).

52/54

Page 247: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Quel est le monde? Partie viii. Gestion du clavier

Remarque : si on doit redessiner l’image en entier àchaque fois, le monde doit contenir de quoirecalculer l’image. C’est possible (voir exercice TP 5).

Ï La fonction dessiner(m) ajoutera des traits, mais n’effacera pas l’image.

Ï La question subsiste : quel est le monde pour cette animation?

Ï Voici les deux principes du dessin à main levée :Ï à chaque fois que la souris est pressée, on ajoute un trait entre la position

précédente de la souris, notée (px,py) et la nouvelle position(mouseX,mouseY),

Ï à chaque fois que la souris est déplacée, on actualise (px,py) etéventuellement le dessin (dans quel ordre?).

Ï Le monde est la position (px,py).

52/54

Page 248: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Quel est le monde? Partie viii. Gestion du clavier

Remarque : si on doit redessiner l’image en entier àchaque fois, le monde doit contenir de quoirecalculer l’image. C’est possible (voir exercice TP 5).

Ï La fonction dessiner(m) ajoutera des traits, mais n’effacera pas l’image.

Ï La question subsiste : quel est le monde pour cette animation?

Ï Voici les deux principes du dessin à main levée :Ï à chaque fois que la souris est pressée, on ajoute un trait entre la position

précédente de la souris, notée (px,py) et la nouvelle position(mouseX,mouseY),

Ï à chaque fois que la souris est déplacée, on actualise (px,py) etéventuellement le dessin (dans quel ordre?).

Ï Le monde est la position (px,py).

52/54

Page 249: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Quel est le monde? Partie viii. Gestion du clavier

Remarque : si on doit redessiner l’image en entier àchaque fois, le monde doit contenir de quoirecalculer l’image. C’est possible (voir exercice TP 5).

Ï La fonction dessiner(m) ajoutera des traits, mais n’effacera pas l’image.

Ï La question subsiste : quel est le monde pour cette animation?

Ï Voici les deux principes du dessin à main levée :Ï à chaque fois que la souris est pressée, on ajoute un trait entre la position

précédente de la souris, notée (px,py) et la nouvelle position(mouseX,mouseY),

Ï à chaque fois que la souris est déplacée, on actualise (px,py) etéventuellement le dessin (dans quel ordre?).

Ï Le monde est la position (px,py).

52/54

Page 250: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Le code Partie viii. Gestion du clavier

LARG = 600HAUT = 600# le monde est (px, py) !def suivant(m) :

return (mouseX, mouseY)

script

def setup() :global msize(LARG, HAUT)background(255, 255, 255)stroke(0)frameRate(28)m = (0, 0)

def draw() :global mdessiner(m)m = suivant(m)

script

def dessiner(m) :(px, py) = m(qx, qy) = (mouseX,mouseY)if mousePressed:

line(px,py,qx,qy)

script

Ï Remarques : background est dans setup et pas dans drawÏ on ne redessine pas toute l’image.

Ï Il faut appeller dessiner(m) avant m=suivant(m).Ï Pour dessiner il faut l’ancienne et la nouvelle valeur de m!

53/54

Page 251: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Le code Partie viii. Gestion du clavier

LARG = 600HAUT = 600# le monde est (px, py) !def suivant(m) :

return (mouseX, mouseY)

script

def setup() :global msize(LARG, HAUT)background(255, 255, 255)stroke(0)frameRate(28)m = (0, 0)

def draw() :global mdessiner(m)m = suivant(m)

script

def dessiner(m) :(px, py) = m(qx, qy) = (mouseX,mouseY)if mousePressed:

line(px,py,qx,qy)

script

Ï Remarques : background est dans setup et pas dans drawÏ on ne redessine pas toute l’image.

Ï Il faut appeller dessiner(m) avant m=suivant(m).Ï Pour dessiner il faut l’ancienne et la nouvelle valeur de m!

53/54

Page 252: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Le code Partie viii. Gestion du clavier

LARG = 600HAUT = 600# le monde est (px, py) !def suivant(m) :

return (mouseX, mouseY)

script

def setup() :global msize(LARG, HAUT)background(255, 255, 255)stroke(0)frameRate(28)m = (0, 0)

def draw() :global mdessiner(m)m = suivant(m)

script

def dessiner(m) :(px, py) = m(qx, qy) = (mouseX,mouseY)if mousePressed:

line(px,py,qx,qy)

script

Ï Remarques : background est dans setup et pas dans drawÏ on ne redessine pas toute l’image.

Ï Il faut appeller dessiner(m) avant m=suivant(m).Ï Pour dessiner il faut l’ancienne et la nouvelle valeur de m!

53/54

Page 253: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Merci pour votre attentionQuestions

?54/54

Page 254: Programmation impérative en Python 3 — Cours 4. Graphismes ... · Sommaire f Partiei.Annonces f Partieii.Dugraphismeenprogrammation f Partieiii.DéplacementsAbsolus f Partieiv.Déplacementrelatif

Cours 4 — Graphismes tortue et Processing.

f Partie i. Annonces

Annonces

f Partie ii. Du graphisme enprogrammation

Géométries absolues ou relatives

Tortue vs Python

f Partie iii. Déplacements Absolus

Qu’est-ce qu’une tortue ?

Exemple

Tracer une fonction

Les tuples, un type composé

Courbes paramétriques

Exemples

Traçons un cercle

Ou plus simplement

f Partie iv. Déplacement relatif

Les déplacements relatifs

Carré et autres polygones

La courbe fractale de Koch

Fractale en Python

La fractale ultime

f Partie v. Variables locales/globales

Variables locales

Variables globales

Fonctions locales

Procédures et fonctions

f Partie vi. Processing

Qu’est-ce donc?

Le mode Python

Mon premier programme

Le système RGB

Formes géométriques de base

Les coordonnées en informatique

Les modes CORNER, CORNERS et CENTER

Afficher un texte

Insérer des images

f Partie vii. Faire des animations

Principes

Approche

Le modèle MVC

Planter le décor

L’état

L’évolution du monde

Afficher l’état

Ô temps ! suspends ton vol…

Un autre exemple (1/2)

Un autre exemple (2/2)

f Partie viii. Gestion du clavier

La fonction keypressed

Retour vers le futur

Quel est le monde?

Dessin à main levée à la souris

Quel est le monde?

Le code

f Partie ix. Table des matières