Sieprinsky (pour le fun)

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Sieprinsky (pour le fun)

Message par Dr. Dri »

voila un ptit code ke jme suis amusé à faire...
comme l'algo existait déjà en plein de langages ca m'a pris 5 minutes à traduire en PB

on clique une fois sur la croix pour arrêter le dessin
et une deuxieme fois pour quitter le programme

Code : Tout sélectionner

;je commence à en avoir marre des screens ^^
;une fenetre ca va plus vite
OpenWindow(1, 100, 100, 640, 480, #PB_Window_MinimizeGadget, "")

;allez savoir pourquoi c'était codé comme ca ^^
RandomSeed(ElapsedMilliseconds())
x.f = Random(RGB(255,255,255)-1)
y.f = Random(RGB(255,255,255)-1)

;i va servir à compter le nombre de plots réalisés
i.l = 0
;n va permetre d'identifier 3 cas que je ne saurais expliquer ^^
n.l

;on recrée un germe aléatoire (ca fait classe dit comme ca ^^)
RandomSeed(ElapsedMilliseconds())

;et là on va dessiner dans la fenetre...
Repeat

  ;donc on a 300 valeurs possibles...
  n = Random(299)
  
  ;sur votre gauche vous pouvez admirer le premier cas de figure...
  If n <= 100
    x * 0.5
    y * 0.5
  EndIf
  
  ;ici on observe le second
  If n <= 200 And n > 100
    x = (x + 0.5) * 0.5
    y = (y +  1) * 0.5
  EndIf
  
  ;et là il ne reste plus que le dernier...
  If n > 200
    x = (x + 1) * 0.5
    y * 0.5
  EndIf
  
  ;apres les valeurs à l'écran je sais pas pourquoi on les calcule ainsi ^^
  xx = x*581+25
  yy = y*350+50
  
  ;apres c'est moi qui fait gaffe à bien dessiner dans la fenetre
  If xx>=0 And yy>=0 And xx<640 And yy<480
    If StartDrawing(WindowOutput())
      Plot(xx, yy, RGB(255,255,255))
      StopDrawing()
    EndIf
  EndIf
  
  ;et hop un plot de plus
  ;(je considere qu'il a forcément eu lieu)
  i + 1
  
  ;je mes à jour le titre de la fenetre
  SetWindowTitle(1, Str(i)+" itérations effectuées sur la fractale.")
  
  ;et j'avais la flemme de passer par un thread
  ;alors pas de WaitWindowEvent()
  event = WindowEvent()
Until event=#PB_Event_CloseWindow

;là on a fini de dessiner alors je mange moins de temps cpu...
Repeat
  event = WaitWindowEvent()
Until event=#PB_Event_CloseWindow
Dri ^^
Oliv
Messages : 2117
Inscription : mer. 21/janv./2004 18:39

Message par Oliv »

Je vois rien :( alors j'ai mis un écran rafraichit tous les 50 plots() et c'est sympa

Code : Tout sélectionner

;je commence à en avoir marre des screens ^^ 
;une fenetre ca va plus vite 
InitSprite()
OpenWindow(1, 100, 100, 640, 480, #PB_Window_MinimizeGadget, "")
OpenWindowedScreen(WindowID(),0,0,640,480,0,0,0) 

;allez savoir pourquoi c'était codé comme ca ^^ 
RandomSeed(ElapsedMilliseconds()) 
x.f = Random(RGB(255,255,255)-1) 
y.f = Random(RGB(255,255,255)-1) 

; Pour le flipBuffer
Multiplie.l = 1

;i va servir à compter le nombre de plots réalisés 
i.l = 0 
;n va permetre d'identifier 3 cas que je ne saurais expliquer ^^ 
n.l 

;on recrée un germe aléatoire (ca fait classe dit comme ca ^^) 
RandomSeed(ElapsedMilliseconds()) 

;et là on va dessiner dans la fenetre... 
Repeat 

  ;donc on a 300 valeurs possibles... 
  n = Random(299) 
  
  ;sur votre gauche vous pouvez admirer le premier cas de figure... 
  If n <= 100 
    x * 0.5 
    y * 0.5 
  EndIf 
  
  ;ici on observe le second 
  If n <= 200 And n > 100 
    x = (x + 0.5) * 0.5 
    y = (y +  1) * 0.5 
  EndIf 
  
  ;et là il ne reste plus que le dernier... 
  If n > 200 
    x = (x + 1) * 0.5 
    y * 0.5 
  EndIf 
  
  ;apres les valeurs à l'écran je sais pas pourquoi on les calcule ainsi ^^ 
  xx = x*581+25 
  yy = y*350+50 
  
  ;apres c'est moi qui fait gaffe à bien dessiner dans la fenetre 
  If xx>=0 And yy>=0 And xx<640 And yy<480 
    If StartDrawing(ScreenOutput()) 
      Plot(xx, yy, RGB(255,255,255)) 
      StopDrawing() 
    EndIf 
  EndIf 
  
  ;et hop un plot de plus 
  ;(je considere qu'il a forcément eu lieu) 
  i + 1 
  
  If i = 50 * multiplie ; affiche tous les 50
    FlipBuffers()
    Multiplie + 1
  EndIf
  
  ;je mes à jour le titre de la fenetre 
  SetWindowTitle(1, Str(i)+" itérations effectuées sur la fractale.") 
  
  ;et j'avais la flemme de passer par un thread 
  ;alors pas de WaitWindowEvent() 
  event = WindowEvent() 
Until event=#PB_Event_CloseWindow 

;là on a fini de dessiner alors je mange moins de temps cpu... 
Repeat 
  event = WaitWindowEvent() 
Until event=#PB_Event_CloseWindow
Lukky
Messages : 340
Inscription : dim. 25/janv./2004 12:22
Localisation : Morbihan

Message par Lukky »

Et moi avec ton code Oliv j'ai une bouillie immonde.

C'est étrange ça me rappelle un peu le problème de colonne avec une radeon 9000 pro !

Un bug alors de la radeon ?

JL
Quand on me gonfle trop j'éclate, sinon ça va !
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

en tout cas sur ma FX5700ultra je vois bien les 2versions
celle d'oliv est plus forte en couleur et les point arrive bien les uns apres les autres !! :)
Oliv
Messages : 2117
Inscription : mer. 21/janv./2004 18:39

Message par Oliv »

Moi c'est une geforce 4MX (440 je crois), et seul mon code marche :(
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

chez moi, le premier marche
j'aime bien cela dit :D
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
cookie
Messages : 71
Inscription : mar. 27/janv./2004 21:08
Contact :

Message par cookie »

avec ma GeForce Ti4200, seul le code d'oliv fonctionne, celui de Dr Dri me fait une fenêtre toute blanche :?:
Cookie
Répondre