FRACTMANDELBROT, LA SUITE DE LA SÉRIE "IMAGES FRACTALES"

Messages postés
351
Date d'inscription
samedi 2 février 2002
Statut
Membre
Dernière intervention
6 mai 2004
- - Dernière réponse : cs_Jayz
Messages postés
27
Date d'inscription
samedi 7 juin 2003
Statut
Membre
Dernière intervention
6 août 2003
- 20 juin 2003 à 02:21
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/7463-fractmandelbrot-la-suite-de-la-serie-images-fractales

cs_Jayz
Messages postés
27
Date d'inscription
samedi 7 juin 2003
Statut
Membre
Dernière intervention
6 août 2003
-
N'y a t'il vraimment aucune limite dans ce monde ! c fascinant tout ce qu'on peut faire dans ce language ! Par contre cet aplli m'impressionne sur le peu de ressources kel necessite meme avec mon cel@600 ca tourne...
cs_Alain Proviste
Messages postés
908
Date d'inscription
jeudi 26 juillet 2001
Statut
Modérateur
Dernière intervention
1 février 2015
1 -
Je vous l'avez dit matrixbuffer ça pète...
cs_orisa
Messages postés
38
Date d'inscription
lundi 18 mars 2002
Statut
Membre
Dernière intervention
29 octobre 2003
-
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 :)
cs_orisa
Messages postés
38
Date d'inscription
lundi 18 mars 2002
Statut
Membre
Dernière intervention
29 octobre 2003
-
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_Alain Proviste
Messages postés
908
Date d'inscription
jeudi 26 juillet 2001
Statut
Modérateur
Dernière intervention
1 février 2015
1 -
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
-
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 !
lpikachu58
Messages postés
351
Date d'inscription
samedi 2 février 2002
Statut
Membre
Dernière intervention
6 mai 2004
2 -
c'est vraiment de la méthode fractale, rien n'atteindra jamais l'ondelette