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
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Binäres Sierpinskidreieck

Beitrag von remi_meier »

Kurz und schön

Code: Alles auswählen

OpenWindow(0, 200,200, 500,500, #PB_Window_SystemMenu, "")

Img = CreateImage(#PB_Any, 500, 500)

Repeat
  
  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()
  StartDrawing(WindowOutput())
    DrawImage(UseImage(Img), 0,0)
  StopDrawing()
  
  Event = WaitWindowEvent()
  If Event = 0
    Delay(1)
  EndIf
Until Event = #PB_Event_CloseWindow
:D
Benutzeravatar
benny
Beiträge: 383
Registriert: 29.08.2004 09:18
Wohnort: Am Ende des www's
Kontaktdaten:

Beitrag von benny »

n1, remi :!: :allright:
So long,
benny!
.
nur t0te f1sche schw1mmen m1t dem str0m - 00100 !
Benutzeravatar
ralle
Beiträge: 88
Registriert: 29.11.2004 17:50
Wohnort: Berlin

Beitrag von ralle »

:shock: und das mit so wenig code... respekt! :D
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

Warum zeichnest du immer wieder auf das Bild? Da bewegt sich doch nichts:

Code: Alles auswählen

OpenWindow(0, 200,200, 500,500, #PB_Window_SystemMenu, "")

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()

Repeat
 
  StartDrawing(WindowOutput())
    DrawImage(UseImage(Img), 0,0)
  StopDrawing()
 
  Event = WaitWindowEvent()
  If Event = 0
    Delay(1)
  EndIf
Until Event = #PB_Event_CloseWindow
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

als ich die überschrift gesehen hab, wusste ich, dass es von remi ist,
noch bevor ich auf den autor geschaut hab. :allright:
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
benny
Beiträge: 383
Registriert: 29.08.2004 09:18
Wohnort: Am Ende des www's
Kontaktdaten:

Beitrag von benny »

In Farbe & gespiegelt:

Code: Alles auswählen

OpenWindow(0, 200,200, 300,300, #PB_Window_SystemMenu, "")

Img = CreateImage(#PB_Any, 300, 300)

x=16
y = 16
n=255

StartDrawing(ImageOutput())
For r=0 To n
  For s=0 To n-r
    If (r & s)
      FrontColor(64+r/4,s/4,s/2+64)
      Plot(x+r+5,y+s+5)
      FrontColor(s/4,64+r/4,s/2+64)
      Plot(x+6+n-r,y+6+n-s)
    Else
      FrontColor(128+r/4,s/2,s/2+128)
      Plot(x+r+5,y+s+5)
      FrontColor(s/2,128+r/4,s/2+128)
      Plot(x+6+n-r,y+6+n-s)     
    EndIf
  Next s
Next r
StopDrawing()

Repeat
 
  StartDrawing(WindowOutput())
    DrawImage(UseImage(Img), 0,0)
  StopDrawing()
 
  Event = WaitWindowEvent()
  If Event = 0
    Delay(1)
  EndIf
Until Event = #PB_Event_CloseWindow
So long,
benny!
.
nur t0te f1sche schw1mmen m1t dem str0m - 00100 !
Benutzeravatar
DrShrek
Beiträge: 1970
Registriert: 08.09.2004 00:59

Beitrag von DrShrek »

Und als letztes? Speed optimiert.

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) 
      Plot(x+r+5,y+s+5,RGB(64+r4,s/4,s/2+64)) 
      Plot(x+6+n-r,y+6+n-s,RGB(s/4,64+r/4,s/2+64)) 
    Else 
      Plot(x+r+5,y+s+5,RGB(128+r/4,s/2,s/2+128) ) 
      Plot(x+6+n-r,y+6+n-s,RGB(s/2,128+r/4,s/2+128) )      
    EndIf 
  Next s 
Next r 
StopDrawing() 

Repeat 
  Event = WaitWindowEvent() 
  If Event = 0 
    Delay(1) 
  EndIf 
Until Event = #PB_Event_CloseWindow 
Siehste! Geht doch....?!
PB*, *4PB, PetriDish, Movie2Image, PictureManager, TrainYourBrain, ...
Benutzeravatar
benny
Beiträge: 383
Registriert: 29.08.2004 09:18
Wohnort: Am Ende des www's
Kontaktdaten:

Beitrag von benny »

@Icesoft:

Darauf habe ich bewußt in meinem Beispiel verzichtet, weil es ja in
letztzer Zeit immer mal Bug-Reports über Plot(x,y,RGB) gegeben
hat. (Oder ist der BUG bereits gefixt :?: )

Deswegen habe ich diese Variante über direkten Speicherzugriff gemieden
und habe mich lieber für die GDI-Version (FrontColor) entschieden.

Besonders weil es bei den Zeichenoperationen im Prinzip nicht so sehr auf
Speed ankommt (wird ja nur einmal berechnet / gezeichnet).
So long,
benny!
.
nur t0te f1sche schw1mmen m1t dem str0m - 00100 !
Benutzeravatar
DrShrek
Beiträge: 1970
Registriert: 08.09.2004 00:59

Beitrag von DrShrek »

benny hat geschrieben:@Icesoft:
... (Oder ist der BUG bereits gefixt :?: )..
Ja! In der 3.93.

Code: Alles auswählen

28. Februar 2005 : Version 3.93
...
- Hinzugefügt: Echtzeit-Debugger-Check für Plot(x,y,Farbe) bei ScreenOutput() und SpriteOutput() 
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 »

@benny&ralle: Danke für die Komplimente, aber das ist auch nur eine umgewandelte Info aus dem unendlichen Internet :)
@DD: Jo ich weiss, ist halt so ein kurzer TestCode für kleine Fraktale von mir, der auch für bewegte Sachen funktionieren soll..
@KG: :D
@benny: nice! :allright:
@IS: :) Obwohl es hier nicht nötig wäre und es noch schneller ginge.

cu
Remi :)
Antworten