Inscription / Connexion Nouveau Sujet
Niveau algorithmique
Partager :

[C - SDL] Ensemble de Mandelbrot !

Posté par
barbare05
04-02-09 à 19:06

Bonjour !

voila depuis que j'ai découvert les irréels et les fractales (enfin savoir vraiment comment ca se formait, avec les irréels) j'ai voulu essayer de dessiner en programmant l'ensemble de mandelbrot .
J'arrive a un résultat ... différent ^^.

je vous met les deux fonctions principales, sans le main il sert a rien !^^
désolé pour le peu de commentaires, si vous ne comprenez pas mon code dite le moi
et à la fin je post l'image que j'ai en exécutant ce code .
void dessinerEnsemble(SDL_Surface * ecran)
{
      double xz=0,yz=0; // partie reelle et imaginaire de Zn
      Uint32 noir = SDL_MapRGB(ecran->format,0,0,0);//couleur
      Uint32 blanc = SDL_MapRGB(ecran->format,255,255,255);
      SDL_Rect pos;//position du pixel a colorier
      SDL_Surface * point = SDL_CreateRGBSurface(SDL_HWSURFACE,1,1,32,0,0,0,0); // pixel qu'on collera (blit)
      for(int i = 0; i <= 600; i++)
      {
          for (int u = 0; u <= 1200 ; u++)
          {
            //calculs des valeurs de xz et yz ==> z = xz + i.yz
            xz = -2 + (u * 0.0025);// 0.0025, c'est le pas horizontal
            yz = 1.5 - (i * 0.005);//pas vertical , le graph fait sur Ox [-2,1], et Oy [1.5,-1.5]

            pos.x = u;
            pos.y = i;
            if(calculerModule(xz,yz))
            {
                SDL_FillRect(point,NULL,noir);
                SDL_BlitSurface(point,NULL,ecran,&pos);
                SDL_Flip(ecran);
            }
            else
            {
                SDL_FillRect(point,NULL,blanc);
                SDL_BlitSurface(point,NULL,ecran,&pos);
                SDL_Flip(ecran);
            }
          }
      }
}

bool calculerModule(const double xz,const double yz)
{
    double x1 = xz,y1 = yz;
    double resultat = 0;
    bool Bnoir = false;
    for (int o = 0; o < 150 ; o++)
        {
            x1 = x1*x1 - y1*y1 + xz;
            y1 = 2*x1*y1 + yz;
            resultat = sqrt((x1*x1) + (y1*y1));
            if(resultat > 2)
                {
                    Bnoir = false;
                    return Bnoir;
                }
        }
      Bnoir = true;
      return Bnoir;
}


Merci d'avance si vous trouvez ce qui ne va pas ! je cherche depuis quelques jours et je sais vraiment pas qu'est ce qui pourrait etre la cause de cette ... forme ! ^^

Nico

[C - SDL] Ensemble de Mandelbrot !

Posté par
Fractal
re : [C - SDL] Ensemble de Mandelbrot ! 12-02-09 à 23:57

Bonjour

Citation :

            x1 = x1*x1 - y1*y1 + xz;
            y1 = 2*x1*y1 + yz;

(dans la fonction calculerModule)
À la deuxième ligne, le x1 vient d'être modifié, donc ce n'est pas le bon y1 que tu calcules, il faudrait prendre en compte le x1 non modifié.

Fractal



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !