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

Répondre à ce sujet

Seuls les membres peuvent poster sur le forum !

Vous devez être connecté pour poster :

Connexion / Inscription Poster un nouveau sujet
Une question ?
Besoin d'aide ?
(Gratuit)
Un modérateur est susceptible de supprimer toute contribution qui ne serait pas en relation avec le thème de discussion abordé, la ligne éditoriale du site, ou qui serait contraire à la loi.


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 !