begin process at 2012 05 27 16:33:48
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Graphique

 > GÉNÉRATEUR DE FRACTALES DANS UN BITMAP

GÉNÉRATEUR DE FRACTALES DANS UN BITMAP


 Information sur la source

Note :
9,33 / 10 - par 3 personnes
9,33 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Graphique Niveau :Initié Date de création :06/02/2004 Date de mise à jour :08/02/2004 13:52:10 Vu :4 352

Auteur : obasileus

Ecrire un message privé
Commentaire sur cette source (4)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Ce code crée un bitmap dans lequel est contenue la fractale.

une fois compilé on utilise le programme comme ceci :

c:\fractale image.bmp
larg --> largeur du bmp en pixel
haut --> hauteur du bmp en pixel
cx --> coordonée sur les absisses du centre du repere
cy --> coordonée sur les ordonnées du centre du repere
largeur complexe --> largeur du plan complexe (4 pour pas de zoom)
Iterations --> iterations

Je suis conscient que ce code n'est pas super optimiser (surtout our la creation du bitmap) mais ca que je voulais c'était faire des jolis dessins.

Source

  • #include <stdio.h>
  • #include <math.h>
  • FILE *picture;
  • int main(int argc, char *argv[])
  • {
  • //creation de l'entete du bitmap/////////////////////////////////
  • short haut,larg; //hauteur et largeur de l'image en pixel
  • char nb0; //nb de zero de fin de lign du bitmap
  • char title[7]; //tableau contenant les paramètre de l'entete
  • title[0]=66; // caractère "B"
  • title[1]=77; // "M"
  • title[2]=0;
  • title[3]=54; //divers caractères situés en entete
  • title[4]=40;
  • title[5]=01;
  • title[6]=24; //codage des couleurs en bits
  • short resolution=2834; //resolution du bitmap
  • picture = fopen(argv[1],"wb"); //ouverture du fichier en ecriture
  • //ecriture de l'entete
  • fwrite(&title[0],sizeof(char),1,picture);
  • fwrite(&title[1],sizeof(char),1,picture);
  • for(int i=0;i<8;i++) fwrite(&title[2],sizeof(char),1,picture);
  • fwrite(&title[3],sizeof(char),1,picture);for(int i=0;i<3;i++) fwrite(&title[2],sizeof(char),1,picture);
  • fwrite(&title[4],sizeof(char),1,picture);for(int i=0;i<3;i++) fwrite(&title[2],sizeof(char),1,picture);
  • printf("Larg ? "); scanf("%i",&larg); fwrite(&larg,sizeof(long),1,picture);
  • printf("Haut ? "); scanf("%i",&haut); fwrite(&haut,sizeof(long),1,picture);
  • fwrite(&title[5],sizeof(char),1,picture);
  • fwrite(&title[2],sizeof(char),1,picture);
  • fwrite(&title[6],sizeof(char),1,picture);
  • fwrite(&title[2],sizeof(char),1,picture);
  • for(int i=0;i<8;i++) fwrite(&title[2],sizeof(char),1,picture);
  • fwrite(&resolution,sizeof(short),1,picture);
  • fwrite(&title[2],sizeof(char),1,picture);
  • fwrite(&title[2],sizeof(char),1,picture);
  • fwrite(&resolution,sizeof(short),1,picture);
  • fwrite(&title[2],sizeof(char),1,picture);
  • fwrite(&title[2],sizeof(char),1,picture);
  • for(int i=0;i<8;i++) fwrite(&title[2],sizeof(char),1,picture);
  • /////////////////////////////////////////////////////////////////////////////////
  • nb0=larg%4; // permet de connaitre le nombre de zeros à mettre en fin de ligne du bitmap.
  • float cx,cy; //coordonnées du plan complexe
  • float largeur; //largeur du plan complexe
  • printf("cx ? ");
  • scanf("%f",&cx);
  • printf("cy ? ");
  • scanf("%f",&cy);
  • printf("largeur complexe ? ");
  • scanf("%f",&largeur);
  • short nx=larg,ny=haut;
  • float xmin=cx-largeur/2.0; //calculs des bornes du plan
  • float ymax=cy+largeur/2.0*ny/nx; //calculs des bornes du plan
  • float pas=float(largeur/nx); //calculs du pas d'incrementation
  • float a,b,x,y,x1; //variables du problemes
  • short n;
  • char color[3]; //Tableau des couleurs ( 24bits -> 3 couleurs RVB [0->255])
  • short iter;
  • printf("Iterations ? "); //Nb de fois que la suite doit convergé
  • scanf("%i",&iter);
  • for(int j=0;j<ny;j++)
  • {
  • b=ymax-j*pas;
  • for(int i=0;i<nx;i++)
  • {
  • a=i*pas+xmin;
  • x=0;y=0;n=0;
  • do
  • {
  • x1=x*x-y*y+a;
  • y=2*x*y+b;
  • x=x1;
  • n=n+1;
  • }while(((x*x+y*y)<4) && (n<iter));
  • color[0]=255-255/(sqrt(sqrt(n))+1); //joli codage des couleurs
  • color[1]=pow(n,0.85); //joli codage des couleurs
  • color[2]=255/(sqrt(n)+1); //joli codage des couleurs
  • if(n>(iter-1)) {color[0]=0;color[1]=0;color[2]=0;}
  • fwrite(&color[0],sizeof(char),1,picture);
  • fwrite(&color[1],sizeof(char),1,picture); //ecriture dans le bitmap
  • fwrite(&color[2],sizeof(char),1,picture);
  • }
  • for(int j=0;j<nb0;j++) fwrite(&title[2],sizeof(char),1,picture); //zeros de fin de ligne
  • }
  • return 0;
  • }
#include <stdio.h>
#include <math.h>

FILE *picture;

int main(int argc, char *argv[])
{                                               
    //creation de l'entete du bitmap///////////////////////////////// 
     short haut,larg;        //hauteur et largeur de l'image en pixel
     char nb0;                //nb de zero de fin de lign du bitmap
     char title[7];            //tableau contenant les paramètre de l'entete
     title[0]=66;             // caractère "B"
     title[1]=77;            // "M"
     title[2]=0;
     title[3]=54;            //divers caractères situés en entete
     title[4]=40;
     title[5]=01;
     title[6]=24;            //codage des couleurs en bits
     short resolution=2834; //resolution du bitmap

     picture = fopen(argv[1],"wb"); //ouverture du fichier en ecriture
     
     //ecriture de l'entete

     fwrite(&title[0],sizeof(char),1,picture);
     fwrite(&title[1],sizeof(char),1,picture);
     for(int i=0;i<8;i++) fwrite(&title[2],sizeof(char),1,picture);
     fwrite(&title[3],sizeof(char),1,picture);for(int i=0;i<3;i++) fwrite(&title[2],sizeof(char),1,picture);
     fwrite(&title[4],sizeof(char),1,picture);for(int i=0;i<3;i++) fwrite(&title[2],sizeof(char),1,picture);
     printf("Larg ? "); scanf("%i",&larg); fwrite(&larg,sizeof(long),1,picture);
     printf("Haut ? "); scanf("%i",&haut); fwrite(&haut,sizeof(long),1,picture);
     fwrite(&title[5],sizeof(char),1,picture);
     fwrite(&title[2],sizeof(char),1,picture);
     fwrite(&title[6],sizeof(char),1,picture);
     fwrite(&title[2],sizeof(char),1,picture);
     for(int i=0;i<8;i++) fwrite(&title[2],sizeof(char),1,picture);
     fwrite(&resolution,sizeof(short),1,picture);
     fwrite(&title[2],sizeof(char),1,picture);
     fwrite(&title[2],sizeof(char),1,picture);
     fwrite(&resolution,sizeof(short),1,picture);
     fwrite(&title[2],sizeof(char),1,picture);
     fwrite(&title[2],sizeof(char),1,picture);
     for(int i=0;i<8;i++) fwrite(&title[2],sizeof(char),1,picture);

/////////////////////////////////////////////////////////////////////////////////

     nb0=larg%4;   // permet de connaitre le nombre de zeros à mettre en fin de ligne du bitmap.

     float cx,cy;           //coordonnées du plan complexe
     float largeur;        //largeur du plan complexe
     printf("cx ? ");
     scanf("%f",&cx);
     printf("cy ? ");
     scanf("%f",&cy);
     printf("largeur complexe ? ");
     scanf("%f",&largeur);

     short nx=larg,ny=haut;
     float xmin=cx-largeur/2.0;             //calculs des bornes du plan
     float ymax=cy+largeur/2.0*ny/nx;  //calculs des bornes du plan
     float pas=float(largeur/nx);           //calculs du pas d'incrementation
     float a,b,x,y,x1;                          //variables du problemes
     short n;
     char color[3];      //Tableau des couleurs ( 24bits -> 3 couleurs RVB [0->255])
     short iter;

     printf("Iterations ? ");   //Nb de fois que la suite doit convergé
     scanf("%i",&iter);

     for(int j=0;j<ny;j++)
     {
      b=ymax-j*pas;
      for(int i=0;i<nx;i++)
      {
       a=i*pas+xmin;
       x=0;y=0;n=0;
       do
       {
        x1=x*x-y*y+a;
        y=2*x*y+b;
        x=x1;
        n=n+1;
       }while(((x*x+y*y)<4) && (n<iter));

       color[0]=255-255/(sqrt(sqrt(n))+1);      //joli codage des couleurs
       color[1]=pow(n,0.85);                          //joli codage des couleurs
       color[2]=255/(sqrt(n)+1);                    //joli codage des couleurs

       if(n>(iter-1)) {color[0]=0;color[1]=0;color[2]=0;}

       fwrite(&color[0],sizeof(char),1,picture);
       fwrite(&color[1],sizeof(char),1,picture);   //ecriture dans le bitmap
       fwrite(&color[2],sizeof(char),1,picture);
      }
      for(int j=0;j<nb0;j++) fwrite(&title[2],sizeof(char),1,picture);  //zeros de fin de ligne
     }

     return 0;
}





 Sources du même auteur

Source avec Zip HEADER POUR MANIPULATIONS DE BASES SUR LES LISTES CHAINÉES
Source avec Zip TUTORIAL : TABLEAU DYNAMIQUES À PLUSIEURS DIMENSIONS
Source avec Zip COURS DE C POUR DEBUTANTS
CALCUL DE RACINE CARRÉ
COMPRESSION RLE [DEV-C++]

 Sources de la même categorie

Source avec Zip Source avec une capture PLANNING D'EQUIPE par grephit
Source avec Zip APPLICATION DE DESSIN DE QUELQUES FIGURES par laguchori
Source avec Zip Source avec une capture HDR EXPOSURE FUSION par mecrosoft
Source avec Zip Source avec une capture IRC CLIENT MULTISERVEUR EN MFC (TXIRC) par TeniX
Source avec Zip ENTETE DU FICHIER BMP (BIPMAP) par k.Lutchi

Commentaires et avis

Commentaire de MoDDiB le 06/02/2004 20:11:00

Tres interessant mais pas assez commenté : tu commentes ca a mort et je te mets dierct un joli 10/10 ^^ Merci

Commentaire de MoDDiB le 08/02/2004 15:40:44

Tout de suite c mieux ^^ merci et hop 10 ^^

Commentaire de scelw le 07/05/2004 22:01:37

un code source clair, court et concis pour un programme amusant et intéressant... sympa !

Commentaire de Arnaud16022 le 26/10/2005 13:06:32

dis voir , a quoi correspond nb0 ? enfin, je veux dire, d'ou sort ce calcul: nb0=largeur%r ?  pasque moi j'ai des ptits pb avec les bmp en ce moment... si t'avais de la doc...
merci
++
ad

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,780 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales