Fractmandelbrot, la suite de la série "images fractales"

Soyez le premier à donner votre avis sur cette source.

Vue 2 717 fois - Téléchargée 310 fois

Description

Ce code utilise une des méthodes fractales de mandelbrot pour tracer des images obtenues avec des fonctions. Si la fonction ne diverge pas (c'est a dire qu'au terme n elle se rapproche de l'infini) le point est tracé en noir. Sinon, la couleur placée est en rapport avec la rapidité de divergeance (divergence lente = rouge vif).
Si cette fractale vous a plu, allez voir mon autre code fractal (qui sera suivi par d'autres encore) : http://www.vbfrance.com/article.aspx?Val=9161
Mises à jour:
1. Mode zoom, corigé un bug de fonction

Codes Sources

A voir également

Ajouter un commentaire Commentaires
lpikachu58 Messages postés 351 Date d'inscription samedi 2 février 2002 Statut Membre Dernière intervention 6 mai 2004 2
15 juin 2003 à 23:42
c'est vraiment de la méthode fractale, rien n'atteindra jamais l'ondelette
cs_orisa Messages postés 38 Date d'inscription lundi 18 mars 2002 Statut Membre Dernière intervention 29 octobre 2003
17 juin 2003 à 08:47
Pas mal. je me permet de de donner quelques conseils d'optimisation.

1. Déja la ou tu dessine met le scalemode en pixel et utilise le ScaleHeight et ScaleWidth ça t'évite quelques calculs sur la taile des pixels...

2. utilise plustôt l'API setpixel :)

3. Pourquoi remplir un tableau puis le dessiner ça fait deux fois plus de boucles : comme tu calcules un point après l'autre dessine le tout de suite ! comme ça il n'y aura plus que 3 boucles au lieu de 5 et le tableau devient inutile !

voila ce que j'ai fait : tu prend une nouvelle form, un picturebox et un bouton. tu met le scalemode du picturebox a 3 - pixel et tu copie le code suivant :

'**********************************
Option Explicit

Private Declare Function SetPixel Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long, ByVal crColor As Long) As Long

Const Passe As Integer = 15

Private Sub Command1_Click()
Dim I As Integer
Dim C1 As Integer
Dim C2 As Integer
Dim ancienz(1) As Double
Dim nouveauz(1) As Double
For C1 = 0 To Picture1.ScaleWidth
For C2 = 0 To Picture1.ScaleHeight
ancienz(0) = 0
ancienz(1) = 0
For I = 0 To Passe - 1
nouveauz(0) = ancienz(0) ^ 2 - ancienz(1) ^ 2 - 4 / Picture1.ScaleWidth * C1 + 1
nouveauz(1) = ancienz(0) * ancienz(1) + 2 * Picture1.ScaleHeight / Picture1.ScaleWidth - 4 * Picture1.ScaleHeight / Picture1.ScaleWidth / Picture1.ScaleHeight * C2
If nouveauz(0) ^ 2 + nouveauz(1) ^ 2 > 4 Then
SetPixel Picture1.hdc, C1, C2, RGB(I / Passe * 255, 0, 0)
Exit For
End If
ancienz(0) = nouveauz(0)
ancienz(1) = nouveauz(1)
Next I
Next C2
Next C1
End Sub
'**********************************

c'est un peu plus rapide quand même :)
et la encore, je me demande s'il n'y aurait pas encore moyen d'optimiser... va faloir que je regarde encore :)
mais bravo pour ton code, j'ai apris des choses avec !
cs_Alain Proviste Messages postés 908 Date d'inscription jeudi 26 juillet 2001 Statut Modérateur Dernière intervention 1 février 2015 2
17 juin 2003 à 20:51
http://www.vbfrance.com/article.aspx?Val=6251

Lis ça tu verras tu iras mieux. ( pour la vitesse )
cs_orisa Messages postés 38 Date d'inscription lundi 18 mars 2002 Statut Membre Dernière intervention 29 octobre 2003
18 juin 2003 à 16:26
J'ai fait quelques tests de rapidité.

Je précise que j'ai modifié l'algo présenté ici pour l'optimiser (une seule passe, diverses simplifications et obtimisations diverses).

La référence de vitesse que j'ai prise (100%) représente la vitesse de calcule pure, c'est à dire sans aucun dessin puis j'ai mesuré le temps dans l'ide et compilé des 4 méthodes de dessin suivantes :
API SetPixel,Pset,le module matrixbuffer, et le dessin avec Picture1.Line -Step

IDE EXE
Line : 205% 240%
Pset : 170% 120%
SetPixel : 115% 115%
Matrix : 105% 105%

Outre le coté amusant du PSet qui vu son résultat est transformé en un appel a l'api a la compilation, on peut déja observer que l'utilisation de line est a proscrire (pas de chance djotto : c'est la méthode que t'as choisi :-) bon cela dit, on s'en serait douté...

Pour le reste Pset désavantage le développeur qui teste, à cause de sa plus grande lenteur dans l'IDE qu'une fois compilé. utiliser SetPixel est raisonnable, par contre le module de Proger fait des miracles ! clairement il est bien plus rapide pour dessiner !

Mais... un détail quand même : le module matrixbuffer n'affiche l'image qu'a la fin tandisqu'avec toutes les autres méthodes l'utilisateur 'voit' l'image se construire...

voila voila bonne prog :)
cs_orisa Messages postés 38 Date d'inscription lundi 18 mars 2002 Statut Membre Dernière intervention 29 octobre 2003
18 juin 2003 à 16:43
Encore une remarque : inutile d'essayer de mettre une progressbar si vous utilisez le module matrixbuffer : ça fait perdre tout le gain de rapidité (et même plus) : si vous voulez que l'utilisateur voit qu'il se passe quelque chose utilisez setpixel :)

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.