Tracé de fractales en vb!

Description

Ce petit code pas trop compliqué permet de tracé des fractales.

Mais vous me direz: c' est koi donc une fractale?
C' est un objet mathémathique avant tout, dont ont peut déssiner une représentation graphiquement, ce qui donne souvent un beau résultat.

Le seul problème: c' est assez long a calculer, pour l' exemple ici: de 1 a 5mn selon le pc.

Le code (pas complet, juste la sub de tracé):
============================

'1)On efface l' image (pas obligatoire mais c mieux)
Picture1.Cls

'2)On calacul les "dimentions" de la fractale, pour ne pas avoir des diproportions
larg = XMax - XMin
haut = YMax - YMin

'3)On couvre l' image, en prenant le coordonnées X et Y
For X = 0 To Picture1.ScaleWidth Step 1
For Y = 0 To Picture1.ScaleHeight Step 1

'4) On calacul les "dimentions" de la fractale, pour ne pas avoir des diproportions,
'2eme étape
a = X / Picture1.ScaleWidth * larg + XMin
b = Y / Picture1.ScaleHeight * haut + YMin
c = a
d = b

couleur = couleur0 = couleur1 = couleur2 = 0

'5)La boucle du calcul de la couleur du pixel

Explication.
Pour le calcul, je pense que la meilleur solution est de changé la couleur de chaque pixel, plutot que de tracé des formes.

Do

'6)Le calcul mathémathique

Explication.
La c le coin matheux, qui va pas plaire a tous.
Vous pouvez modifier ca !! mais attention au dépassements de capacité !!

t = Sin(d) * c * d * Cos(c) - (a * 2)
d = c * Cos(d) * c - d - (b * 2)
c = t

'7)On met la couleur ds des variables

Explication.
La on calcul la couleur en fnct des résultats trouvé au dessus

couleur = couleur + 5
couleur0 = d * 15
couleur1 = c * 15
couleur2 = (Abs(c) + Abs(d)) * 15

'8)Quand la valeur max est atteinte, on quitte la boucle
Loop Until couleur > 255 Or (c ^ 2) + (d ^ 2) >= 100

'9) On dessine le pixel
Picture1.PSet (X, Y), RGB(Abs(couleur0), Abs(couleur1), Abs(couleur2))

Next Y
DoEvents
Next X

Voila

Le code complet:
il faut une form, 2 bouttons, une picturebox

Source / Exemple :


'Déclaration des variables
Dim XMin As Single
Dim XMax As Single
Dim YMin As Single
Dim YMax As Single
Dim couleur As Single
Dim couleur0 As Single
Dim couleur1 As Single
Dim couleur2 As Single
Private Sub Command2_Click()
End
End Sub
Private Sub Form_Load()
'Définition des dimention max de la fractale
XMin = -0.5
YMin = -1
XMax = 1.5
YMax = 1
End Sub

Private Sub Command1_Click()
'Mise de l' image a la taille de l' ecran
Command1.Visible = False
Command2.Visible = False
Picture1.Left = 0
Picture1.Top = 0
Picture1.Width = Screen.Width
Picture1.Height = Screen.Height
Call TracerFract
End Sub

Sub TracerFract()
'tracer de la fratale

'1)On efface
Picture1.Cls

'2)On calacul les "dimentions" de la fractale
larg = XMax - XMin
haut = YMax - YMin

'3)On couvre l' image
For X = 0 To Picture1.ScaleWidth Step 1
For Y = 0 To Picture1.ScaleHeight Step 1
 
'4) On remet le tout a zéro pour chaque pixel
 a = X / Picture1.ScaleWidth * larg + XMin
 b = Y / Picture1.ScaleHeight * haut + YMin
  c = a
  d = b
  
couleur = couleur0 = couleur1 = couleur2 = 0
  
'5)La boucle du calcul de la couleur du pixel
  Do

'6)Le calcul mathémathique
t = Sin(d) * c * d * Cos(c) - (a * 2)
d = c * Cos(d) * c - d - (b * 2)
c = t

'7)On met la couleur en variables
couleur = couleur + 5
couleur0 = d * 15
couleur1 = c * 15
couleur2 = (Abs(c) + Abs(d)) * 15

'8)Quand la valeur max est atteinte, on quitte la boucle
Loop Until couleur > 255 Or (c ^ 2) + (d ^ 2) >= 100

'9) On dessine le pixel
Picture1.PSet (X, Y), RGB(Abs(couleur0), Abs(couleur1), Abs(couleur2))

Next Y
DoEvents
Next X

End Sub

Private Sub Form_Unload(Cancel As Integer)
End
End Sub

Private Sub Picture1_KeyPress(KeyAscii As Integer)
End
End Sub

Conclusion :


Laissez des comments!

Codes Sources

A voir également

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.