Page 1 sur 1

Sieprinsky (pour le fun)

Publié : jeu. 02/sept./2004 16:11
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 ^^

Publié : jeu. 02/sept./2004 17:30
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

Publié : ven. 03/sept./2004 13:54
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

Publié : ven. 03/sept./2004 16:56
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 !! :)

Publié : ven. 03/sept./2004 17:16
par Oliv
Moi c'est une geforce 4MX (440 je crois), et seul mon code marche :(

Publié : ven. 03/sept./2004 17:53
par Le Soldat Inconnu
chez moi, le premier marche
j'aime bien cela dit :D

Publié : sam. 04/sept./2004 21:57
par cookie
avec ma GeForce Ti4200, seul le code d'oliv fonctionne, celui de Dr Dri me fait une fenêtre toute blanche :?: