Section courante

A propos

Section administrative du site

Introduction

L'algorithme du Triangle de Sierpinski est une méthode géométrique récursive pour générer une fractale en forme de triangle. Le principe de cet algorithme est de partir d'un grand triangle équilatéral, puis de diviser ce triangle en quatre sous-triangles équilatéraux plus petits. Le sous-triangle central est ensuite retiré, ce qui crée une première itération de la fractale.

Voici comment fonctionne l'algorithme en étapes :

Le Triangle de Sierpinski est un exemple classique de fractale en raison de sa nature auto-similaire : chaque sous-partie du triangle est une version réduite et semblable du triangle entier. L'algorithme continue théoriquement indéfiniment, mais en pratique, il est souvent limité par un nombre d'itérations déterminé pour des raisons de temps de calcul et de résolution graphique.

Cet algorithme est fréquemment utilisé dans les domaines de l'infographie et des mathématiques pour illustrer des concepts de récursivité et d'auto-similarité.

Algorithme

Voici un algorithme en pseudo-code pour dessiner le Triangle de Sierpinski en utilisant une approche récursive. L'idée est de diviser chaque triangle en trois sous-triangles à chaque itération et de retirer le triangle central. Cet algorithme peut être implémenté graphiquement en utilisant des coordonnées pour dessiner des triangles, ou simplement pour générer une structure récursive.

MODULE dessinerTriangleSierpinski(x1, y1, x2, y2, x3, y3, profondeur)
   SI profondeur = 0 ALORS
      dessinerTriangle(x1, y1, x2, y2, x3, y3)
      RETOURNE
   FIN SI

   * Calcul des points au milieu de chaque côté du triangle
   mx1 ← (x1 + x2) / 2
   my1 ← (y1 + y2) / 2
   mx2 ← (x2 + x3) / 2
   my2 ← (y2 + y3) / 2
   mx3 ← (x3 + x1) / 2
   my3 ← (y3 + y1) / 2

   * Appels récursifs pour les trois sous-triangles
   dessinerTriangleSierpinski(x1, y1, mx1, my1, mx3, my3, profondeur - 1)
   dessinerTriangleSierpinski(mx1, my1, x2, y2, mx2, my2, profondeur - 1)
   dessinerTriangleSierpinski(mx3, my3, mx2, my2, x3, y3, profondeur - 1)

Exemple en langage de programmation GWBASIC

Voici un exemple d'un Triangle de Sierpinski écrit en GWBASIC :

  1. 10 SCREEN 1
  2. 20 Hauteur=25
  3. 30 ValeurFinale=30000
  4. 40 DIM X(3),Y(3)
  5. 50 X(0)=INT(320/2)
  6. 60 Y(0)=Hauteur
  7. 70 X(1)=X(0)-(INT(320)-1) / 3
  8. 80 Y(1)=(INT(200)-1)-Hauteur-1
  9. 90 X(2)=X(0)+(320-1) / 3
  10. 100 Y(2)=(200-1)-Hauteur-1
  11. 110 XP=X(0)
  12. 120 YP=Y(0)
  13. 130 RANDOMIZE TIMER
  14. 140 FOR I=1 TO ValeurFinale
  15. 150 P=INT(RND*3)
  16. 160 XP=INT((XP+X(P)) / 2)
  17. 170 YP=INT((YP+Y(P)) / 2)
  18. 180 PSET(XP,YP)
  19. 190 NEXT

Voici en terminant un exemple du résultat de se petit programme :

Exemple en langage de programmation Perl

Voici un exemple d'un Triangle de Sierpinski écrit en Perl :

  1. #!/usr/bin/perl
  2.  
  3. use Tk;
  4. use strict;
  5.  
  6. my $Hauteur=25;
  7. my $ValeurFinale=100000;
  8. my (@X,@Y);
  9.  
  10. my $mw = MainWindow->new;
  11. $mw->title("Triangle Sierpinski");
  12. my $canvas = $mw->Canvas( -width=>320, -height=>200, -background=>"black");
  13. $canvas->pack(-expand => 1, -fill => 'both');
  14.  
  15. sub SetPixel($$$) {
  16.  my($x,$y,$color) = @_;
  17.  $canvas->createLine($x, $y, $x + 1, $y + 1, -width => 1, -fill => $color);
  18. }
  19.  
  20. $X[0] = int(320 / 2);
  21. $Y[0] = $Hauteur;
  22. $X[1] = $X[0] - (int(320) - 1) / 3;
  23. $Y[1] = (int(200) - 1) - $Hauteur - 1;
  24. $X[2] = $X[0] + (320 - 1) / 3;
  25. $Y[2] = (200 - 1) - $Hauteur - 1;
  26. my $XP = $X[0];
  27. my $YP = $Y[0];
  28. my $I = 1;
  29.  
  30. sub anim() {
  31.    if($I <= $ValeurFinale) {
  32.      my $P = rand(2 + 1);
  33.      $XP = int(($XP + $X[$P]) / 2);
  34.      $YP = int(($YP + $Y[$P]) / 2);
  35.      SetPixel($XP, $YP, "yellow");
  36.      $I++;
  37.    }
  38. }
  39.  
  40. my $id = $mw->repeat(5, \&anim);
  41.  
  42. MainLoop;

Voici en terminant un exemple du résultat de se petit programme :

Exemple en langage de programmation PowerBASIC

Voici un exemple d'un Triangle de Sierpinski écrit en PowerBASIC :

  1. SCREEN 1
  2. Hauteur=25
  3. ValeurFinale=30000
  4. DIM X(3),Y(3)
  5. X(0)=INT(320/2)
  6. Y(0)=Hauteur
  7. X(1)=X(0)-(INT(320)-1) / 3
  8. Y(1)=(INT(200)-1)-Hauteur-1
  9. X(2)=X(0)+(320-1) / 3
  10. Y(2)=(200-1)-Hauteur-1
  11. XP=X(0)
  12. YP=Y(0)
  13. RANDOMIZE TIMER
  14. FOR I=1 TO ValeurFinale
  15.    P=INT(RND*3)
  16.    XP=INT((XP+X(P)) / 2)
  17.    YP=INT((YP+Y(P)) / 2)
  18.    PSET(XP,YP)
  19. NEXT

Voici en terminant un exemple du résultat de se petit programme :

Exemple en langage de programmation QuickPascal

Voici un exemple d'un Triangle de Sierpinski écrit en QuickPascal :

  1. Program TriangleSierpinski;
  2.  
  3. Uses Crt,MSGraph;
  4.  
  5. Const
  6.  GetMaxScreenX=320;
  7.  GetMaxScreenY=200;
  8.  Hauteur=25;
  9.  ValeurFinale=30000;
  10.  
  11. Var
  12.  X,Y:Array[0..2]of Word;
  13.  Err,XP,YP,I,P:Word;
  14.  
  15. BEGIN
  16.  Err:=_SetVideoMode(_VRes2Color);
  17.  _SetColor(WHITE);
  18.  Randomize;
  19.  X[0]:=GetMaxScreenX shr 1;
  20.  Y[0]:=Hauteur;
  21.  X[1]:=X[0]-(GetMaxScreenX div 3);
  22.  Y[1]:=GetMaxScreenY-Hauteur-1;
  23.  X[2]:=X[0]+(GetMaxScreenX div 3);
  24.  Y[2]:=GetMaxScreenY-Hauteur-1;
  25.  XP:=X[0];YP:=Y[0];
  26.  For I:=1 TO ValeurFinale do Begin
  27.    P:=Random(3);
  28.    XP:=(XP+X[P])shr 1;
  29.    YP:=(YP+Y[P])shr 1;
  30.    _SetPixel(XP,YP);
  31.  End;
  32.  Repeat Until KeyPressed;
  33. END.

Voici en terminant un exemple du résultat de se petit programme :



Dernière mise à jour : Samedi, le 9 novembre 2024