UP | HOME

Graphisme tortue
Activités #1

Table des matières

Le mini-projet consiste à créer des dessins originaux en graphisme tortue, et pas à résoudre les exercices de travaux pratiques. Le but des exercices est de vous apprendre des techniques et de vous inspirer. Vous pouvez réutiliser ces dessins pour vos créations.

1. Prélude

Nous allons utiliser le package TurtleGraphics pour dessiner nos premiers graphiques en R.

install.packages("TurtleGraphics")
  • Quelles sont les différences entre la graphisme cartésien et le graphisme polaire ?
  • Quelles sont les primitives essentielles TurtleGraphics pour chacun d’eux ?

Lorsque vous écrivez plusieurs programmes graphiques dans l’éditeur, vous voudrez sans doute faire une pause d’une ou deux secondes entre chaque dessin. Pour cela, il existe une fonction primitive Sys.sleep(dt) qui prend un nombre réel dt et suspend l’exécution du programme pendant dt secondes. Par exemple, Sys.sleep(2) réalise une pause de 2 secondes. Cherchez l’aide de la fonction Sys.sleep. Vérifiez son fonctionnement en exécutant le code ci-dessous.

library("TurtleGraphics")
turtle_init()
## pour ne pas le recalculer 5 fois
angle = 360 / 5
for (i in 1:5) {
  ## dessin d’un pentagone régulier
  turtle_forward(10)
  Sys.sleep(0.5)
  turtle_right(angle)
  Sys.sleep(0.5)
}

2. Oursin

Programmez une fonction Oursin(n,c) modélisant un oursin ayant n épines, chaque épine étant d’une couleur différente et de longueur aléatoire dans [0,c]. Vous utiliserez les fonctions runif et rainbow dont vous trouverez l’explication dans les docs …

library("TurtleGraphics")
turtle_init()
turtle_hide()
Oursin(100,50);

oursin.jpg

3. Bissectrices d’un triangle

Programmez une fonction Equi(c) dessinant un triangle équilatéral de côté c dans la direction du cap courant de la tortue, sur sa gauche. Mais vous tracerez aussi dans une autre couleur une portion des bissectrices intérieures du triangle, de même longueur que le côté.

library("TurtleGraphics")
turtle_init()
Equi(40);

triangle.jpg

4. Flocon de Von Koch

N.B. Vous trouverez des informations sur les courbes fractales avec Google. Un petit livre de Benoit Mandelbrot, l’inventeur de cette théorie, est à la B.U. : Les Objets Fractals.

  1. Nous avons vu en cours (page 19) une fonction traçant une courbe de Von Koch.
    VK <- function(n,T) {
      ## approximant de niveau n et de base T
      if (n == 0) turtle_forward(T)
      else {
        VK(n-1,T/3)
        turtle_left(60)
        VK(n-1,T/3)
        turtle_right(120)
        VK(n-1,T/3)
        turtle_left(60)
        VK(n-1,T/3)
      }
    }
    
    library("TurtleGraphics")
    n <- 5
    T <- 100
    turtle_init(100,40)
    turtle_hide()
    turtle_up()
    turtle_goto(0,1)
    turtle_down()
    turtle_right(90)
    VK(n,T);
    
    

    courbe_von_koch.jpg

  2. Programmer le flocon de Von Koch, obtenu en greffant une courbe de Von Koch sur chaque côté d’un triangle équilatéral.
  3. Expérimenter l’alternative de placer la courbe de Von Koch à l’intérieur plutôt qu’à l’extérieur du flocon. Vous obtiendrez l’anti-flocon cristallin …

5. Fils tendus I

  1. Définissez une fonction Line(x1,y1,x2,y2) traçant le segment reliant les points de coordonnées (x1, y1) et (x2, y2). L’état de la tortue après l’exécution de cette fonction est non spécifié.
    library("TurtleGraphics")
    turtle_init()
    turtle_lwd(3)
    Line(0, 0, 25, 25)
    turtle_col("red")
    Line(25, 25, 75,75)
    turtle_col("blue")
    Line(75, 75, 100, 100)
    

    fils_tendus_0.jpg

  2. Programmez une fonction FilsTendus(length=100, step=10) qui résout l’exercice pour enfants proposé ci-dessous.

    ex_fils_tendus_1.jpg

6. Courbes du Dragon

6.1. Courbe de Levy

Programmez l’approximant de niveau n et de taille T de la célèbre courbe fractale de Levy.

Elle est construite de la manière suivante. La courbe de niveau 0 est un segment AB de longueur T. La courbe de niveau 1 est la ligne brisée ACB, toujours avec AB = T. Le triangle isocèle ACB est rectangle en C. Cette transformation est itérée sur chacun des sous-segments AC et CB, et ainsi de suite.

  1. Dessinez à la main les niveaux 3, 4 et 5.
  2. Programmez la fonction Levy(n,T), en traduisant la description ci-dessus en récurrence sur n.

L’argument T [la taille] représente la distance entre le point de départ A et le point d’arrivée B.

6.2. Courbe du dragon

Programmez l’approximant de niveau n et de taille T de la célèbre courbe fractale du dragon.

7. Le Jeu du Chaos

Il s’agit d’un programme célèbre montrant la possible émergence d’une figure régulière à partir de l’aléatoire. On considère les sommets A(0, T), B(-T, -T) et C(T, -T) d’un triangle isocèle, et le processus suivant. On part d’un point quelconque du canevas M(x0 ; y0) et :

  1. Soit H l’un des sommets A, B, ou C au hasard.
  2. Soit I le milieu du segment MH. On dessine le point I.
  3. M devient I. Continuer à l’étape 1.

Écrire un programme répétant n fois l’affichage du point I décrite ci-dessus. Pour n grand, on voit une figure bien connue des chaoticiens émerger du brouillard !

N.B. Pour afficher un point, vous vous documenterez sur les fonctions sample et plot.

8. Fils tendus II

  1. Prolongez l’exercice des fils tendus avec cette image.
  2. Programmez un joli travail en fils tendus : string art.

9. Fleur II

Programmer une fonction Fleur dont chacun des n pétales est dessinée avec la fonction fleur vue en cours. Étendez la fonction pour choisir le nombre nc de côtés du polygone utilisé pour les pétales.

library("TurtleGraphics")
turtle_init()
turtle_hide()
turtle_up()
turtle_forward(30)
turtle_left(90)
turtle_forward(10)
turtle_down()
Fleur(6,3,4,10)

fleur_demo.jpg

10. Spirale

Programmez le dessin sur cette page en vous aidant du pseudo-code.

Created: 2023-08-23 mer. 14:41