EXPLORATEUR FRACTALE MANDELBROT HAUTE DEFINITION

violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 - 11 mars 2007 à 11:42
guillaume1136 Messages postés 21 Date d'inscription jeudi 10 novembre 2005 Statut Membre Dernière intervention 3 juin 2008 - 15 nov. 2007 à 16:45
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/41815-explorateur-fractale-mandelbrot-haute-definition

guillaume1136 Messages postés 21 Date d'inscription jeudi 10 novembre 2005 Statut Membre Dernière intervention 3 juin 2008
15 nov. 2007 à 16:45
Salut Proger,

merci pour le tuyaux :), je vais me pencher sur cette DLL.
C'est vrai qu'on ne pence pas assez souvent à regarder directement dans MSDN, c'est un bon reflex, j'y avai pas pencé. lol
Et enfin merci pour le site c'est se que je cherchais.
Proger Messages postés 248 Date d'inscription vendredi 10 novembre 2000 Statut Membre Dernière intervention 19 décembre 2008
15 nov. 2007 à 14:56
Salut Guillaume1136, je n'ai pas de réponses pour .NET ...

Cependant la fameuse DLL ddraw.dll est certainement la réponse (c'est celle utilisé pour l'affichage vidéo/film, ca ne passe donc pas par le GDI:Get/SetPixel... mais ca écrit pratiquement directement dans la mémoire vidéo)

En VB6 c'est pratiquement inutilisable hélas. Peut-etre qu'en .NET c'est plus simple.

Question source, cherche directement dans la msdn online de microsoft, ca m'étonnerai qu'un code source ai jamais été publié en vb.net

Enfin, si tu cherches d'autres formules a modéliser, intéresse toi aux attracteurs étranges (clifford, etc). Le site de Paul Bourke fourni les fonctions mathématiques "prete à l'emploi" pour la programmation.
guillaume1136 Messages postés 21 Date d'inscription jeudi 10 novembre 2005 Statut Membre Dernière intervention 3 juin 2008
4 oct. 2007 à 19:29
Je suis aussi sur un programme affichant des fractals de Mandelbrot et Julia mais en .NET, et je l'ai commencer dans le même esprit notamment celui de l'optimisation, pour ma part je ne suis pas encore aller fouiller dans le code ASM, mais j'ai déja banni le SetPixel qui afreusement lent pour utiliser une version réctifier de la source "GetPixel Très rapide" http://www.vbfrance.com/codes/GETPIXEL-TRES-RAPIDE_37145.aspx, problème : encore et toujour des bugs (problème du décalage des pixel résolue mais pas celui de "Memory Access Violation"), j'aimerai donc connaitre un moyen en VB.NET d'écrire et afficher directement à partir d'une même zone mémoire mémoire dans une fenètre.

De plus je suis preneur de tout algorithme different du mandelbrot classic, les maths et les complexes c'est pas mon fort et je suis imcapable de transformer une formule mathématique en algo. Or, sa cour pas la rue sur internet contrairement au formules.
Proger Messages postés 248 Date d'inscription vendredi 10 novembre 2000 Statut Membre Dernière intervention 19 décembre 2008
15 mars 2007 à 01:46
Quel soucis du détail, Renfield :) Tu m'incites à revoir tout le code !

Le coup du GetDC(0) je me suis toujours demandé comment le releaser, vu que ça n'utilise pas GetDesktopWindow() je n'ai pas les params pour ReleaseDC() !

Pour l'autre remarque, le gain semble minime vu les courtes boucles, j'ai donc pas fait l'astuce... Cependant comme t'as fait la remarque, voici le résultat décompilé : on remplace une suite d'instructions asm fst/fld/fmul/fld/fmul/faddp/fcomp par un fxch/fstp/fxch/fadd/fcomp (test du while, en gros). On économise effectivement deux instructions, qui sont les fmul. Même si les fmul sont rapide avec les cpu moderne, c'est l'économie de deux cycles qui est intéressant.
Tiens d'ailleur je viens de voir que le i=2*r*i+io c'est en fait a=r*i puis i=a+a+io ... pas fou le compilateur :D
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
14 mars 2007 à 13:19
pas mal !
code survollé...
fuite mémoire dans MatrixBuffer (StopRender)
GetDC(0)
non Releasé (ReleaseDC)


quelques cycles gagnés, en calculant r*r et i*i d'avance :
(j'ai également typé dx, dy, r, i & co)


Dim dx As Double, dy As Double
Dim r As Double, i As Double, ro As Double, io As Double, rt As Double
Dim r2 As Double, i2 As Double
Dim n As Long
Dim cl As Long
Dim xx As Long, yy As Long ', adv As Long
Tracing = True

dx = (XMax - XMin) / F_Width ' + XMin
dy = (YMax - YMin) / F_Height ' + YMin

ReDim FractBuf(1 To F_Width, 1 To F_Height)

'suite mandelbrot
'z.(n+1)=z.n^2-z.0
'avec z.n tel que (z=a+i*b, i*i=-1)

For xx = 1& To F_Width
'dans le cas d'un dessin tramé, il vaux mieux utiliser la formule de localisation x,y
'adv = adv + 1
'xx = adv Mod F_Width
'yy = Int(adv / F_Height)

ro = dx * xx + XMin

For yy = 1& To F_Height
io = dy * yy + YMin
i2 = io * io
r2 = ro * ro

'en jouant sur r, on peux changer la forme initiale de la fractale (ro + 1, - 1, etc)
r = ro
i = io

n = 0

Do While ((r2 + i2) < F_Eloigne) And (n < F_Iter)

rt = r2 - i2 + ro
i = 2 * r * i + io
r = rt
r2 = r * r
i2 = i * i

n = n + 1
Loop
FractBuf(xx, yy) = n
Next yy, xx

Tracing = False
End Sub
neamar Messages postés 26 Date d'inscription vendredi 9 septembre 2005 Statut Membre Dernière intervention 12 avril 2009
11 mars 2007 à 15:07
Après quelques test, programme vraiment génial !
Une interface graphique hyper rapide (jamais vu ca en Vb %-) , des fonctions pour les fractales optimisées...

Juste une remarque comme ca (parce que ca fait tâche sinon dans ce super code) : les deux variables de M_StartRender ne sont pas typées...

Et merci pour tout les commentaires !
neamar Messages postés 26 Date d'inscription vendredi 9 septembre 2005 Statut Membre Dernière intervention 12 avril 2009
11 mars 2007 à 14:14
Très utile, le module MatrixBuffer !
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
11 mars 2007 à 11:42
Je n'ai pas regardé le code, juste le résultat, mais c'est vraiment impressionant !

10/10
@+
Rejoignez-nous