Tapis de Sierpiński (programme informatique)

Tapis de Sierpiński (programme informatique)

Ces programmes récursifs écrits en langages Java, C et Caml génèrent des tapis de Sierpiński.

La fonction TapisSierpinsky rédigée en Caml vous permet non seulement d'obtenir un tapis de Sierpiński, mais également de colorer les différents carrés selon leur taille en redéfinissant constamment la couleur en fonction de paramètres tels que la longueur (lng) ou la hauteur (htr).

  let rec TapisSierpinsky x y lng htr =
    if lng > 2 && htr > 2 then begin
      let nlng = lng / 3 and nhtr = htr / 3 in
      set_color (rgb (9 * lng) (3 * lng) htr);
      fill_rect (x + nlng) (y + nhtr) nlng nhtr;
      for k = 0 to 8 do
        if k <> 4 then let i = k / 3 and j = k mod 3 in
        TapisSierpinsky (x + i * nlng) (y + j * nhtr) nlng nhtr
      done;
    end;;

Le programme Java est un applet, dont la méthode drawSierpinskiCarpet est récursive:

 import java.awt.*;
 import java.applet.*;
 
 public class SierpinskiCarpet extends Applet {
     private Graphics g=null;
     private int d0=729; // 3^6
 
     public void init() {
         g=getGraphics();
         resize(d0,d0);
     }
 
     public void paint(Graphics g) {
         //  démarrez la récursion:
         drawSierpinskiCarpet ( 0, 0, getWidth(), getHeight() );
     }
 
     private void drawSierpinskiCarpet(int xHG, int yHG, int largeur, int hauteur) {
         if (largeur>2 && hauteur>2) {
             int w=largeur/3, h=hauteur/3;
             g.fillRect ( xHG+w, yHG+h, w, h );
             for (int k=0;k<9;k++) if (k!=4) {
                 int i=k/3, j=k%3;
                 drawSierpinskiCarpet ( xHG+i*w, yHG+j*h, w, h ); // récursion
             }
         }
     }
 }

Pour le programme en langage C on procède différemment que dans le programme écrit pour les triangles de Sierpiński. Au lieu de dessiner à chaque fois une forme et d'en enlever un morceau, on enlève des morceaux à une seule forme dessinée une fois pour toutes ; c'est-à-dire que l'on « gruyèrise » un rectangle.

/* pour compiler taper en ligne de commande :
   gcc tapis.c -o tapis `allegro-config --libs`
   pour exécuter taper tapis suivi du nombre d'itérations :
   tapis 7 */
 
#include <stdlib.h>
#include <math.h>
#include <allegro.h>
 
#define MAXX 768
#define MAXY 665
#define OX 5 
#define OY 5
#define TX 758
#define TY 655
 
BITMAP *bmp;
 
/* fonction récursive, qui a pour paramètres 
   les coordonnées (x, y) d'un des sommets d'un rectangle,
   a la longueur et b la largeur de ce rectangle  et,
   n le nombre d'itérations */
 
void tapis_Sierpinski(double x, double y, double a, double b, int n)
{
  if (n>0)
    {
      /* on supprime le petit rectangle central */
      rectfill(bmp, (int) (x+a/3), (int) (y+b/3), (int) (x+2*a/3), (int)(y+2*b/3), 8);
      /* appels récursifs pour les huit rectangles restants */
      tapis_Sierpinski(x, y, a/3, b/3, n-1);
      tapis_Sierpinski(x+a/3, y, a/3, b/3, n-1);
      tapis_Sierpinski(x+2*a/3, y, a/3, b/3, n-1);
      tapis_Sierpinski(x, y+b/3, a/3, b/3, n-1);
      tapis_Sierpinski(x+2*a/3, y+b/3, a/3, b/3, n-1);
      tapis_Sierpinski(x, y+2*b/3, a/3, b/3, n-1);
      tapis_Sierpinski(x+a/3, y+2*b/3, a/3, b/3, n-1);
      tapis_Sierpinski(x+2*a/3, y+2*b/3, a/3, b/3, n-1);
    } else       
      /* on dessine un rectangle plein */
      rectfill(bmp, (int) x, (int) y, (int) (x+a), (int)(y+b), 1);
}
 
int main(int argc, char *argv[])
{
  unsigned long n=1;
  if (argc>1) n=strtoul(argv[1], NULL, 10);
 
  /* initialisation de allegro */
  allegro_init();
 
  set_color_depth(8);
 
  bmp = create_bitmap(MAXX, MAXY);
  if(!bmp)
    {
      allegro_message("Ne peut pas créer l'image\n");
      return 1;
    }
 
  tapis_Sierpinski(OX, OY, TX, TY, (int)n);
 
  save_bitmap("Tapis_de_Sierpinski.pcx", bmp, desktop_palette);
  destroy_bitmap(bmp);
 
  return 0;
}
 
END_OF_MAIN();
/* note finale des programmes allegro */

Wikimedia Foundation. 2010.

Contenu soumis à la licence CC-BY-SA. Source : Article Tapis de Sierpiński (programme informatique) de Wikipédia en français (auteurs)

Игры ⚽ Нужно сделать НИР?

Regardez d'autres dictionnaires:

  • Tapis de Sierpinski (programme informatique) — Tapis de Sierpiński (programme informatique) Ces programmes récursifs écrits en langages Java, C et Caml génèrent des tapis de Sierpiński. La fonction TapisSierpinsky rédigée en Caml vous permet non seulement d obtenir un tapis de Sierpiński,… …   Wikipédia en Français

  • Tapis de Sierpinski/programme — Tapis de Sierpiński (programme informatique) Ces programmes récursifs écrits en langages Java, C et Caml génèrent des tapis de Sierpiński. La fonction TapisSierpinsky rédigée en Caml vous permet non seulement d obtenir un tapis de Sierpiński,… …   Wikipédia en Français

  • Tapis de sierpinski/programme — Tapis de Sierpiński (programme informatique) Ces programmes récursifs écrits en langages Java, C et Caml génèrent des tapis de Sierpiński. La fonction TapisSierpinsky rédigée en Caml vous permet non seulement d obtenir un tapis de Sierpiński,… …   Wikipédia en Français

  • Tapis de Sierpiński — Pour les articles homonymes, voir Tapis (homonymie). Tapis de Sierpiński Le tapis de Sierpiński (1916), du nom de Wacław Sierpiński, est une …   Wikipédia en Français

  • Sierpinski — Cette page d’homonymie répertorie les différents sujets et articles partageant un même nom. Le mot Sierpinski peut renvoyer à : Wacław Sierpiński, mathématicien polonais Tapis de Sierpiński Tapis de Sierpiński (programme informatique)… …   Wikipédia en Français

  • Tapis (homonymie) — Cette page d’homonymie répertorie les différents sujets et articles partageant un même nom. Cet article possède un paronyme, voir : Bernard Tapie. Sur les autres projets Wikimedia  …   Wikipédia en Français

  • Sierpinsky — Sierpinski Cette page d’homonymie répertorie les différents sujets et articles partageant un même nom. Le mot Sierpinski peut renvoyer à : Wacław Sierpiński, mathématicien polonais Tapis de Sierpiński Tapis de Sierpiński (programme… …   Wikipédia en Français

  • Algorithmique — Organigramme de programmation représentant l algorithme d Euclide L algorithmique est l’ensemble des règles et des techniques qui sont impliquées dans la définition et la conception d algorithmes, c est à dire de processus systématiques de… …   Wikipédia en Français

  • Projet:Mathématiques/Liste des articles de mathématiques — Cette page n est plus mise à jour depuis l arrêt de DumZiBoT. Pour demander sa remise en service, faire une requête sur WP:RBOT Cette page recense les articles relatifs aux mathématiques, qui sont liés aux portails de mathématiques, géométrie ou… …   Wikipédia en Français

  • Liste des articles de mathematiques — Projet:Mathématiques/Liste des articles de mathématiques Cette page recense les articles relatifs aux mathématiques, qui sont liés aux portails de mathématiques, géométrie ou probabilités et statistiques via l un des trois bandeaux suivants  …   Wikipédia en Français

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”