Binäres Sierpinskidreieck

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
DrShrek
Beiträge: 1970
Registriert: 08.09.2004 00:59

Beitrag von DrShrek »

remi_meier hat geschrieben:.... und es noch schneller ginge...
Zeig mal bitte Deine (schnellere) Version. Bin neugierig :wink:
Siehste! Geht doch....?!
PB*, *4PB, PetriDish, Movie2Image, PictureManager, TrainYourBrain, ...
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag von remi_meier »

Hier noch mit PB-Mitteln:

Code: Alles auswählen

InitSprite() 
OpenWindow(0, 200,200, 300,300, #PB_Window_SystemMenu, "") 
OpenWindowedScreen(WindowID(0), 0, 0, 300, 300, 0, 0, 0) 

Img = CreateSprite(#PB_Any, 300, 300) 

x = 16 
y = 16 
n = 255 

StartDrawing(ScreenOutput())  
For r = 0 To n 
  For s = 0 To n-r 
    If (r & s) 
      cR.l = 64+r/4
      cG.l = s/4
      cB.l = s/2+64
      ;Plot(x+r+5, y+s+5, RGB(64+r/4, s/4, s/2+64))
      Plot(x+r+5, y+s+5, ((cB)<<16)|((cG)<<8)|(cR)); (((64+r4)<<15)| ((s/4)<<7)| ((s/2+64)))) 
      ;Plot(x+6+n-r,y+6+n-s, RGB(s/4, 64+r/4, s/2+64))
      Plot(x+6+n-r, y+6+n-s, ((cB)<<16)|((cR)<<8)|(cG))
    Else
      cR = 128+r/4
      cG = s/2
      cB = s/2+128
      ; Plot(x+r+5, y+s+5, RGB(128+r/4,s/2,s/2+128)) 
      Plot(x+r+5, y+s+5, ((cB)<<16)|((cG)<<8)|(cR))
      ; Plot(x+6+n-r, y+6+n-s, RGB(s/2,128+r/4,s/2+128) )
      Plot(x+6+n-r, y+6+n-s, ((cB)<<16)|((cR)<<8)|(cG))  
    EndIf 
  Next s 
Next r 
StopDrawing() 

Repeat 
  Event = WaitWindowEvent() 
  If Event = 0 
    Delay(1) 
  EndIf 
Until Event = #PB_Event_CloseWindow
Mit ASM gehts natürlich noch schneller :D
Vielleicht gibt es auch noch n schnelleren Algorithmus :roll:
Benutzeravatar
DrShrek
Beiträge: 1970
Registriert: 08.09.2004 00:59

Beitrag von DrShrek »

Danke! :wink:
Siehste! Geht doch....?!
PB*, *4PB, PetriDish, Movie2Image, PictureManager, TrainYourBrain, ...
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag von remi_meier »

Ok Danilo :D

Code: Alles auswählen

Img = CreateImage(#PB_Any, 500, 500) 
StartDrawing(ImageOutput()) 
  For x = 0 To 500 
    For y = 0 To 500 
      If x & y <> 0  
        Plot(x,y, $FF) 
      EndIf 
    Next y 
  Next x 
StopDrawing() 

OpenWindow(0, 200,200, 500,500, #PB_Window_SystemMenu, "") 
CreateGadgetList(WindowID())
ImageGadget(0, 0, 0, 500, 500, UseImage(Img))


Repeat 
  Event = WaitWindowEvent() 
Until Event = #PB_Event_CloseWindow
:wink:

PS: Das ist die offiziel (von Danilo bestätigte) richtige Version ein Image auf einem Fenster anzuzeigen!
Aber wie gesagt, war eigentlich nur ein Test...
Zuletzt geändert von remi_meier am 16.03.2005 20:37, insgesamt 1-mal geändert.
FloHimself
Beiträge: 338
Registriert: 05.09.2004 18:47

Beitrag von FloHimself »

Code: Alles auswählen

  If Event = 0 
    Delay(1) 
  EndIf 
Was macht das?
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag von remi_meier »

Jo mist, danke!
Das war, als ich Nicht WaitWindowEvent() sondern WindowEvent() benutzt habe :wink: . (simuliert das 'Wait').
cu
Remi
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Beitrag von Danilo »

remi_meier hat geschrieben:Ok Danilo :D
[...]
Aber wie gesagt, war eigentlich nur ein Test...
Danke! Funktioniert nun auch auf Linux korrekt und das
neuzeichnen geht automatisch... ;)
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Antworten