6.3 Galerie d’exemples de figures Smalltalk

Pour illustrer l’utilisation des Figures Smalltalk Dr.Geo, nous vous proposons une petite série d’exemples. Ceux-ci vous montrent leurs importantes possibilités et nous espérons qu’ils seront également une source d’inspiration. Pour chacun de ces exemples, nous donnons le code source Smalltalk de la figure puis son résultat. Le code source doit être copié dans un éditeur de figure Smalltalk puis exécuté.

Animer une figure

Ces exemples s’appuient sur la gestion du temps et celle des processus programmés en Smalltalk.

Un premier exemple simple pour comprendre le principe :

| figure p pause |
figure:=DrGeoFigure nouveau.
p := figure point: 0@0.
pause := Delay forSeconds: 0.2.
figure faire: [ 
   100 foisRépéter: [
      p déplacerA: (p coordonnées + (0.1@0)).
      figure actualiser.
      pause wait]]

Un deuxième exemple avec une figure plus élaborée :

| figure s r u pause |
figure := DrGeoFigure nouveau.
s := figure segmentDe: 0@ -1 à: 4@ -1.
r := figure pointSurLigne: s à: 0.8.
s := figure segmentDe: 0@0 à: 0@1.
u := figure pointSurLigne: s à: 0.7.
u rond petit; couleur: Color blue.
1 à: 100 faire: [:n|
   u := figure 
      point: [:parents| |y t|
         y := parents first y.
         t := parents second x.
         (n / 5) @ t * y * (1 - y)] 
      parents:  {u . r}.
   u rond petit; couleur: Color blue].
pause := Delay forSeconds: 0.1.
figure faire: [
   0 à: 1 par: 0.05 faire: [:x | 
      r mathItem setCurveAbscissa: x.
      figure actualiser.
      pause wait]]

Triangle de Sierpinski

Cet exemple s’appuie largement sur un bloc de code récursif.

| triangle c |
c := DrGeoFigure nouveau.
triangle := [].

triangle := [:s1 :s2 :s3 :n |
    c segmentDe: s1 à: s2;
        segmentDe: s2 à: s3;
        segmentDe: s3 à: s1.
    n >0 ifTrue:
        [triangle
            valeur: s1
            valeur: (c milieuDe: s1 et: s2) cacher
            valeur: (c milieuDe: s1 et: s3) cacher
            valeur: n-1.
        triangle
            valeur: (c milieuDe: s1 et: s2) cacher
            valeur: s2
            valeur: (c milieuDe: s2 et: s3) cacher
            valeur: n-1.
        triangle
            value: (c milieuDe: s1 et: s3) cacher
            value: (c milieuDe: s2 et: s3) cacher
            value: s3
            value: n-1.]].
triangle valeur: 0@3 valeur:  4@ -3 valeur: -4@ -3 valeur: 3.
(c point: 0@3) montrer
fig59

Figure 6.2: Triangle de Sierpinski