Transwiki:Triangle de Sierpiński (programme informatique)
Un livre de Wikibooks.
Ces programmes récursifs écrits en C soit Java, permettent de générer des triangles de Sierpiński.
[modifier] En C
Ce programme utilise la bibliothèque graphique Allegro.
/* pour compiler taper en ligne de commande : gcc triangle.c -o triangle `allegro-config --libs` pour exécuter taper triangle suivi du nombre d'itérations : triangle 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) de l'extrémité gauche de la base d'un triangle équilatéral, a la longueur d'un de ses cotés et n le nombre d'itérations */ void triangle_Sierpinski(double x, double y, double a, int n) { double b=-a*sqrt(3.0)/2; /* négatif à cause de l'orientation de l'axe des ordonnées vers le bas */ if (n>0) { /* on dessine un triangle plein */ triangle(bmp, (int) x, (int) y, (int) (x+a), (int)y, (int)(x+a/2),(int)(y+b), 4); /* et on supprime le petit triangle central */ triangle(bmp, (int) (x+a/2), (int) y, (int) (x+3*a/4), (int)(y+b/2), (int)(x+a/4),(int)(y+b/2), 0); /* appels récursifs */ triangle_Sierpinski(x, y, a/2, n-1); triangle_Sierpinski(x+a/2, y, a/2, n-1); triangle_Sierpinski(x+a/4, y+b/2, a/2, n-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); /* fixe la palette */ set_palette(desktop_palette); bmp = create_bitmap(MAXX, MAXY); if(!bmp) { allegro_message("Ne peut pas créer l'image\n"); return 1; } triangle_Sierpinski(OX, OY+TY, TX, (int)n); save_bitmap("Triangle_de_Sierpinski.pcx", bmp, desktop_palette); destroy_bitmap(bmp); return 0; } END_OF_MAIN(); /* note finale des programmes allegro */