Tracé de fractales en vb!

0/5 (6 avis)

Vue 3 845 fois - Téléchargée 315 fois

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

Ajouter un commentaire Commentaires
Messages postés
72
Date d'inscription
mardi 26 février 2002
Statut
Membre
Dernière intervention
20 juin 2003

Sympas !!! Ici, la construction du fractal est plus simple que celle de mon programme ("Bienvenue au pays des fractals" pour les intéressés : http://www.vbfrance.com/article.asp?Val=3661 ) : Simplement de la trigo élémentaire sans aucunes conditions particulières... Mais bon, ça n'en reste pas moins des fractals ! Pour ma prat, je me suis attaqué à la catégorie des complexes... Et je ne compte pas m'arrêter au seul ensemble de mandelbrot (ce sera l'affaire de la prochaine version :) ...

BRAVO !!!
Messages postés
68
Date d'inscription
lundi 21 mai 2001
Statut
Membre
Dernière intervention
4 janvier 2003

bien vu!
Messages postés
19
Date d'inscription
mardi 15 janvier 2002
Statut
Membre
Dernière intervention
22 avril 2002

La vitesse du calcul dépend du processeur: env. 3mn pour un duron 733

Peut etre qu' il y a aussi moyen de l' améliorer en changeant le code, si vous trouvez, laissez un message.

a+
Messages postés
1491
Date d'inscription
dimanche 19 novembre 2000
Statut
Modérateur
Dernière intervention
7 juillet 2014

Pas mal mais dommage que se soit aussi long
Messages postés
550
Date d'inscription
vendredi 5 janvier 2001
Statut
Membre
Dernière intervention
23 septembre 2006

a escuse j'avais pas vu la capture !
Afficher les 6 commentaires

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.