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 |
|
|
| L'ensemble de Mandelbrot projeté sur une sphère | |
| | 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: L'ensemble de Mandelbrot projeté sur une sphère Lun 26 Avr 2021 - 4:38 | |
| Bonjour à tous. Après plus de trois mois d’inactivité et pour mon message N° 6666 , je vous propose l’ensemble de Mandelbrot projeté sur une sphère. Quelle drôle d’idée ! Ce code est destiné au compilateur qui s’en sort plutôt assez bien. Si vous l’utilisez avec l’interpréteur, soyez un petit peu patient. - Code:
-
rem ============================================================================ rem Mandel_Sur_Sphere rem ============================================================================
DIM MinMax(3, 2) DIM u(3) DIM v(3) DIM w(3) DIM Alfa DIM Beta DIM Offx DIM Offy DIM Zoom DIM ScaleMdb, module, xm, ym, zx0, zy0, cx, cy, x, y,z Alfa = 30 * Pi / 180 Beta = 20 * Pi / 180 Offx = 0 Offy = 0 Zoom = 15
MinMax(1, 1) = -30 MinMax(1, 2) = 30 MinMax(2, 1) = -30 MinMax(2, 2) = 30 MinMax(3, 1) = -30 MinMax(3, 2) = 30
' Matrice de Projection u(1) = COS(Alfa) * COS(Beta) u(2) = SIN(Alfa) * COS(Beta) u(3) = SIN(Beta)
v(1) = 0-SIN(Alfa) v(2) = COS(Alfa) v(3) = 0
w(1) = 0-COS(Alfa) * SIN(Beta) w(2) = 0-SIN(Alfa) * SIN(Beta) w(3) = COS(Beta) width 0,700 : height 0,600 picture 10 : full_space 10 : 2d_target_is 10 :color 10,0,0,0 caption 0,"Mandelbrot sur sphère" sphere() caption 0,caption$(0) + " : terminé" end rem ============================================================================ FNC Mandelbrot(p, q) dim_local np,xn,yn,dx,dy ,varmdb ScaleMdb = 1 xm = 1.75 ym = 0
zx0 = p / (Pi / 2) * 2 * ScaleMdb - xm zy0 = q / (Pi / 2) * 2 * ScaleMdb - ym
cx = zx0 cy = zy0
x = zx0 y = zy0
FOR NP = 1 TO 25 xn = x*x - y*y + cx yn = 2 * x * y + cy Module = SQR(xn * xn + yn * yn) dx = xn - x dy = yn - y x = xn y = yn IF Module > 2 then result 0 : exit_fnc NEXT NP VarMdb = SQR(dx*dx + dy*dy) result 4.5 - 4.5 * LOG(VarMdb + 1E-12)
END_FNC rem ============================================================================
SUB Sphere() dim_local r,i,j,p,q,ncol,colmdb R = 30
FOR i = -400 TO 400 step 2 : ' pour diminuer le ... FOR j = -200 TO 200 step 2 : ' ... temps du tracé p = i / 400 * Pi q = j / 400 * Pi NCol = 0 ColMdB = Mandelbrot(p, q) IF ColMdB <> 0 THEN NCol = 1
x = COS(p) * COS(q) * R y = SIN(p) * COS(q) * R z = SIN(q) * R
Plot(x, y, z, NCol)
NEXT j NEXT i
END_SUB rem ============================================================================ SUB Plot(x, y, z, NCol) DIM_LOCAL xp(3),nx,ny
xp(1) = u(1) * x + u(2) * y + u(3) * z xp(2) = v(1) * x + v(2) * y + v(3) * z xp(3) = w(1) * x + w(2) * y + w(3) * z
NX = INT(320 * (xp(2) - Offx) * Zoom / 640 + 320 + .5) NY = INT(-240 * (xp(3) - Offy) * Zoom / 480 + 240 + .5) if ncol = 1 2d_pen_color 255,0,0 else 2d_pen_color 255,255,0 end_if IF xp(1) >= 0 THEN 2d_point NX, NY : display
if scancode = 27 then terminate
END_SUB rem ============================================================================
| |
| | | jean_debord
Nombre de messages : 1266 Age : 70 Localisation : Limoges Date d'inscription : 21/09/2008
| Sujet: Re: L'ensemble de Mandelbrot projeté sur une sphère Lun 26 Avr 2021 - 9:00 | |
| Merci papydall ! Petite suggestion, pour gagner un peu (?) de vitesse dans la fonction Mandelbrot : - utiliser le carré du module (on gagne 2 SQR) - supprimer VarMdb et retourner un nombre constant puisque tous les points de l'ensemble ont la même couleur (on gagne 1 LOG + quelques opérations) - Code:
-
FOR NP = 1 TO 25 xn = x*x - y*y + cx yn = 2 * x * y + cy Module = xn * xn + yn * yn dx = xn - x dy = yn - y x = xn y = yn IF Module > 4 then return 0 NEXT NP return 1
| |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: L'ensemble de Mandelbrot projeté sur une sphère Lun 26 Avr 2021 - 17:34 | |
| Merci Jean pour ta petite suggestion. Mais tu t’es melangé les pinceaux (crocodile basic en est la cause !) Il faut un result (pano) au lieu de return (croco) dans la FNC Mandelbrot(p,q). En plus il faut ajouter exit_fnc, sinon bonjour ’INF’ n’est pas une valeur en virgule flottante correcteBon voici le nouveau code vu et corrigé. - Code:
-
rem ============================================================================ rem Mandel_Sur_Sphere rem ============================================================================
DIM MinMax(3, 2) DIM u(3) DIM v(3) DIM w(3) DIM Alfa DIM Beta DIM Offx DIM Offy DIM Zoom DIM ScaleMdb, module, xm, ym, zx0, zy0, cx, cy, x, y,z Alfa = 30 * Pi / 180 Beta = 20 * Pi / 180 Offx = 0 Offy = 0 Zoom = 15
MinMax(1, 1) = -30 MinMax(1, 2) = 30 MinMax(2, 1) = -30 MinMax(2, 2) = 30 MinMax(3, 1) = -30 MinMax(3, 2) = 30
' Matrice de Projection u(1) = COS(Alfa) * COS(Beta) u(2) = SIN(Alfa) * COS(Beta) u(3) = SIN(Beta)
v(1) = 0-SIN(Alfa) v(2) = COS(Alfa) v(3) = 0
w(1) = 0-COS(Alfa) * SIN(Beta) w(2) = 0-SIN(Alfa) * SIN(Beta) w(3) = COS(Beta) width 0,700 : height 0,600 picture 10 : full_space 10 : 2d_target_is 10 :color 10,0,0,0 caption 0,"Mandelbrot sur sphère" sphere() caption 0,caption$(0) + " : terminé" end rem ============================================================================ FNC Mandelbrot(p, q) dim_local np,xn,yn,dx,dy ,varmdb ScaleMdb = 1 xm = 1.75 ym = 0
zx0 = p / (Pi / 2) * 2 * ScaleMdb - xm zy0 = q / (Pi / 2) * 2 * ScaleMdb - ym
cx = zx0 cy = zy0
x = zx0 y = zy0
FOR NP = 1 TO 25 xn = x*x - y*y + cx yn = 2 * x * y + cy Module = xn * xn + yn * yn dx = xn - x dy = yn - y x = xn y = yn IF Module > 4 then result 0 : exit_fnc NEXT NP result 1
END_FNC rem ============================================================================
SUB Sphere() dim_local r,i,j,p,q,ncol,colmdb R = 30
FOR i = -400 TO 400 step 2 : ' pour diminuer le ... FOR j = -200 TO 200 step 2 : ' ... temps du tracé p = i / 400 * Pi q = j / 400 * Pi NCol = 0 ColMdB = Mandelbrot(p, q) IF ColMdB <> 0 THEN NCol = 1
x = COS(p) * COS(q) * R y = SIN(p) * COS(q) * R z = SIN(q) * R
Plot(x, y, z, NCol)
NEXT j NEXT i
END_SUB rem ============================================================================ SUB Plot(x, y, z, NCol) DIM_LOCAL xp(3),nx,ny
xp(1) = u(1) * x + u(2) * y + u(3) * z xp(2) = v(1) * x + v(2) * y + v(3) * z xp(3) = w(1) * x + w(2) * y + w(3) * z
NX = INT(320 * (xp(2) - Offx) * Zoom / 640 + 320 + .5) NY = INT(-240 * (xp(3) - Offy) * Zoom / 480 + 240 + .5) if ncol = 1 2d_pen_color 255,0,0 else 2d_pen_color 255,255,0 end_if IF xp(1) >= 0 THEN 2d_point NX, NY : display
if scancode = 27 then terminate
END_SUB rem ============================================================================
| |
| | | jean_debord
Nombre de messages : 1266 Age : 70 Localisation : Limoges Date d'inscription : 21/09/2008
| Sujet: Re: L'ensemble de Mandelbrot projeté sur une sphère Lun 26 Avr 2021 - 17:42 | |
| Effectivement, j'avais fait les tests avec Crocodile Basic ! Enfin, l'important c'est qu'on s'y retrouve | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: L'ensemble de Mandelbrot projeté sur une sphère Lun 26 Avr 2021 - 17:47 | |
| Il m’arrive souvent de m’emmêler les jambes aussi ! l'important c'est qu'on s'y retrouve comme tu l’as dit. | |
| | | Contenu sponsorisé
| Sujet: Re: L'ensemble de Mandelbrot projeté sur une sphère | |
| |
| | | | L'ensemble de Mandelbrot projeté sur une sphère | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |