Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Encore une fractale de Mandelbrot. | |
| | Auteur | Message |
---|
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Encore une fractale de Mandelbrot. Mer 7 Oct 2020 - 0:14 | |
| Encore une fractale de Mandelbrot. - Code:
-
rem ============================================================================ rem Fractale de Mandelbrot rem ============================================================================ dim cr(15),cg(15),cb(15) dim real,imag,incr,x,y,r width 0,700 : height 0,520 picture 10 : full_space 10 : 2d_target_is 10 caption 0,"Veuillez patienter ... Tracé en cours ... <ESC> pour arrêter ..." Init() Tracer() caption 0,"Terminé"
end rem ============================================================================ ' palette 16 couleurs DATA 0,63,63,63,63,63,31,0,0,31,31,31,47,63,63,63 DATA 0,0,15,31,47,63,63,63,63,31,15,0,0,0,0,0 DATA 0,0,0,0,0,0,0,0,31,63,63,63,63,63,42,21 rem ============================================================================ SUB Init() dim_local i FOR i = 0 TO 15 : READ CR(i) : NEXT i FOR i = 0 TO 15 : READ CG(i) : NEXT i FOR i = 0 TO 15 : READ CB(i) : NEXT i ' valeurs initiales real = -2.2 imag = -1.2 incr = 0.005
END_SUB rem ============================================================================ SUB Tracer() dim_local colour FOR y = 0 TO 240 r = real FOR x = 0 TO 700 colour = mod((64 - mandel(r, imag, 64)) , 16) 2d_pen_color cr(colour)*4,cg(colour)*4,cb(colour)*4 2d_point x, y : 2d_point x,480-y : display r = r + incr if scancode = 27 then terminate NEXT x imag = imag + incr NEXT y END_SUB rem ============================================================================ FNC Mandel(ox,oy,limit) dim_local c%,x,y,xx,yy x = ox : y = oy FOR c% = limit TO 1 STEP -1 xx = x * x : yy = y * y IF xx + yy >= 4 THEN EXIT_FOR y = x * y * 2 + oy x = xx - yy + ox NEXT c% result c% END_FNC rem ============================================================================
C’est lent, désespéramment lent, mais le rendu final est bôôô ! - Spoiler:
| |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Encore une fractale de Mandelbrot. Dim 11 Oct 2020 - 22:30 | |
| Merci Papydall ! - Citation :
- C’est lent, désespéramment lent, mais le rendu final est bôôô !
Oui ! Avec le compilateur c’est moins long : 2mn 29s. Pour que le code soit compatible avec le compilateur, j’ai déplacé les trois lignes de DATA et mises juste après les DIM. Pour le fun, j’ai essayé en C++ avec la librairie SFML : 0,023842s - Spoiler:
- Code:
-
#include <iostream> #include <SFML/Graphics.hpp>
using namespace std; using namespace sf;
float real = -2.2; float imag = -1.2; float incr = 0.005; short x = 0; short y = 0; float r = 0;
Color pen_color;
vector<float> cr = {0,63,63,63,63,63,31,0,0,31,31,31,47,63,63,63}; vector<float> cg = {0,0,15,31,47,63,63,63,63,31,15,0,0,0,0,0}; vector<float> cb = {0,0,0,0,0,0,0,0,31,63,63,63,63,63,42,21};
short mandel(float ox, float oy, short limit) { float xl = ox; float yl = oy; short c; for (c = limit; c >= 1; --c) { float xx = xl * xl; float yy = yl * yl;
if (xx + yy >= 4) break;
yl = xl * yl * 2 + oy; xl = xx - yy + ox; } return (c); }
void tracer(Image &im) { float colour = 0;
for (y = 0; y <= 240 ; ++y) { r = real; for (x = 0; x <= 700; ++x) { colour = ((64 - mandel(r, imag, 64)) % 16); pen_color = Color(cr[colour] * 4, cg[colour] * 4, cb[colour] * 4); im.setPixel(x, y , pen_color); im.setPixel(x, 480 - y, pen_color); r += incr; } imag += incr; } }
int main() {
Image im; im.create(700, 480, Color::White);
Clock clock; tracer(im); cout << clock.getElapsedTime().asSeconds() << endl;
Texture tex; tex.loadFromImage(im);
Sprite sp(tex); sp.setPosition(-1, 0);
RenderWindow window(VideoMode(700, 480), "Fractale de Mandel"); Event event; while (window.isOpen()) { while (window.pollEvent(event)) { if (event.type == Event::Closed) window.close(); }
window.clear(); window.draw(sp); window.display(); }
return (0); }
| |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Encore une fractale de Mandelbrot. Lun 12 Oct 2020 - 1:04 | |
| Merci Marc pour l’adaptation en C++ Mais le crocodile (plus accessible pour moi) n’en fait qu’une bouchée ! Voici le code en crocodile basic : c’est instantané ! - Spoiler:
- Code:
-
rem ================================================================================== rem Fractal de Mandelbrot rem ==================================================================================
dim cr(15),cg(15),cb(15) dim reel,imaginaire,incr,x,y,r mode 3,"Fractal de Mandebrot",600,520
Init Tracer
while inkey$() = "" : wend rem ================================================================================== ' palette 16 couleurs DATA 0,63,63,63,63,63,31,0,0,31,31,31,47,63,63,63 DATA 0,0,15,31,47,63,63,63,63,31,15,0,0,0,0,0 DATA 0,0,0,0,0,0,0,0,31,63,63,63,63,63,42,21 rem ================================================================================== SUB Init() dim i FOR i = 0 TO 15 : READ CR(i) : NEXT i FOR i = 0 TO 15 : READ CG(i) : NEXT i FOR i = 0 TO 15 : READ CB(i) : NEXT i ' valeurs initiales reel = -2.2 imaginaire = -1.2 incr = 0.005
END_SUB rem ============================================================================ SUB Tracer() dim colour FOR y = 0 TO 240 r = reel FOR x = 0 TO 600 colour = (64 - mandel%(r, imaginaire, 64) mod 64) pen rgb(cr(colour)*4,cg(colour)*4,cb(colour)*4) plot x, y : plot x,480-y r = r + incr NEXT x imaginaire = imaginaire + incr NEXT y END_SUB rem ============================================================================ FUNCTION Mandel%(ox,oy,limit) dim c%,x,y,xx,yy x = ox : y = oy FOR c% = limit TO 1 STEP -1 xx = x * x : yy = y * y IF xx + yy >= 4 THEN return c% y = x * y * 2 + oy x = xx - yy + ox NEXT c% mandel% = c% END_FUNCTION rem ============================================================================
| |
| | | jean_debord
Nombre de messages : 1266 Age : 70 Localisation : Limoges Date d'inscription : 21/09/2008
| Sujet: Re: Encore une fractale de Mandelbrot. Lun 12 Oct 2020 - 8:24 | |
| Pour le crocodile, voir aussi les exemples dans la section "Figures fractales"
Pas vraiment instantané, mais la méthode de coloration exige un peu plus de calculs. | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Encore une fractale de Mandelbrot. Lun 12 Oct 2020 - 9:42 | |
| Bonjour à tous ! - Papydall a écrit:
- Voici le code en crocodile basic : c’est instantané !
Tu m’as devancé ! Tu as été plus rapide que moi ! Bon, l’avantage c’est que le code est tout prêt ! Merci Papydall ! - Jean_Debord a écrit:
- Pour le crocodile, voir aussi les exemples dans la section "Figures fractales"
Merci Jean ! J’avais déjà testé tes exemples et savouré l’extrême rapidité d’exécution de FBCroco. Je viens d’essayer le code ci-dessus de Papydall. En moins d’une seconde le programme est dévoré ! | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Encore une fractale de Mandelbrot. Mar 13 Oct 2020 - 0:03 | |
| - Marc a écrit:
- En moins d’une seconde le programme est dévoré !
On peut dire que c’est un crocodile dont l’appétit est insatiable ! | |
| | | Contenu sponsorisé
| Sujet: Re: Encore une fractale de Mandelbrot. | |
| |
| | | | Encore une fractale de Mandelbrot. | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |