Deutsch
Stammtisch & Café

Auf den Spuren des Herrn Sierpinski

 

Nico
Madysa
Letzten samstag abend (Ich hatte mich entschieden, Asterix doch nicht zu gucken ) habe ich ein wenig mit binärem OR und AND beschäftigt.
Ich ging vom einfachen Fall aus, dass ich die Zahlen von 0 bis 10 in allen möglichen Kombinationen miteinander verknüpfe.
KompilierenMarkierenSeparieren
declare s1% , s2% , res%

whileloop 0 , 10

    s1% = &loop

    whileloop 0 , 10

        s2% = &loop
        res% = AND(s1%,s2%)
        Oder eben
        res% = OR(s1%,s2%)
        Oder auch
        res% = ADD(s1%,s2%)

    EndWhile

EndWhile


Ich wollte zuerst deren Unterschiede zum gewöhnlichen Addieren feststellen.
Als ich mir die Differenzen als Zahlen ausgeben ließ, war mir das zu unklar. Also gab ich mir das in einem kleinen Diagramm aus.
KompilierenMarkierenSeparieren
SetPixel s1% , res% , RGB(255,0,0)

Das war schon anschaulicher, aber bei weitem genauso unnütz wie die Zahlen (Genau genommen war das ganze Experiment unnütz ).
Jedenfalls fuhr ich fort, in dem ich den Zahlenbereich auf 0-100 ausweiterte.
Und plötzlich kamen mir die Figuren, die AND und OR hervorbrachten recht bekannt vor...
Nach etwas Herumprobieren wählte ich den Zahlenbereich 0-127 und endlich hatte es bei mir Klick gemacht.
Es handelte sich um ein [...] !
Diese Figur wird normalerweise nur durch Rekursion erreicht (erst letztes Jahr bin ich am Zeichnen dieser Figur mittels Rekursion kläglich gescheitert).
Umso mehr war ich überrascht, dass sich diese Figur über binäre Verknüpfungs-Funktionen erreichen lassen.
Nach einiger Arbeit bekam ich folgenden bildschönen Code heraus:
KompilierenMarkierenSeparieren
proc DrawSierpinskiAND

    parameters ord% , farbe% , x% , y%
    declare i%
    ord% = 2 ^ ord%

    whileloop 0 , ord%-1

        i% = &loop

        whileloop 0 , i%

            SetPixel x%+i% , y%+And(i%,&loop)  , Farbe%

        EndWhile

    EndWhile

endproc

proc DrawSierpinskiOR

    parameters ord% , farbe% , x% , y%
    declare i%
    ord% = 2 ^ ord%

    whileloop 0 , ord%-1

        i% = &loop

        whileloop 0 , ord%-1-i%

            SetPixel x%+i% , y%+Or(i%,&loop)  , Farbe%

        EndWhile

    EndWhile

endproc

declare time&
cls
TextColor RGB(255,255,255) , (-1)
UseBrush 1 , RGB(000,000,000)
Fill 10 , 10 , 0
UseBrush 1 , RGB(255,255,255)
Rectangle 99 , 99 - 101+256 , 101+256
time& = &GetTickCount
DrawSierpinskiAND 8 , RGB(255,000,000) , 100+000 , 100+000
DrawText 10 , 10 , str$(int((&GetTickCount-time&)1000))
waitinput
Rectangle 99 , 99 - 101+256 , 101+256
time& = &GetTickCount
DrawSierpinskiAND 7 , RGB(255,000,000) , 100+000 , 100+000
DrawSierpinskiAND 7 , RGB(255,000,000) , 100+128 , 100+000
DrawSierpinskiAND 7 , RGB(255,000,000) , 100+128 , 100+128
DrawText 10 , 30 , str$(int((&GetTickCount-time&)1000))
waitinput
Rectangle 99 , 99 - 101+256 , 101+256
time& = &GetTickCount
DrawSierpinskiAND 6 , RGB(255,000,000) , 100+000 , 100+000
DrawSierpinskiAND 6 , RGB(255,000,000) , 100+064 , 100+000
DrawSierpinskiAND 6 , RGB(255,000,000) , 100+064 , 100+064
DrawSierpinskiAND 6 , RGB(255,000,000) , 100+128 , 100+000
DrawSierpinskiAND 6 , RGB(255,000,000) , 100+192 , 100+000
DrawSierpinskiAND 6 , RGB(255,000,000) , 100+192 , 100+064
DrawSierpinskiAND 6 , RGB(255,000,000) , 100+128 , 100+128
DrawSierpinskiAND 6 , RGB(255,000,000) , 100+192 , 100+128
DrawSierpinskiAND 6 , RGB(255,000,000) , 100+192 , 100+192
DrawText 10 , 50 , str$(int((&GetTickCount-time&)1000))
waitinput
end

Parameter:
ord% = Ordung des Dreiecks (je höher, umso größer wird es)
farbe% = Farbe des Dreieckes als RGB-Wert
x% , y% = X- und Y-Position des Dreieckes
Mit diesem Code lässt sich schnell herausfinden, dass sich solch ein Dreieck schneller zeichnen lässt, wenn man es in kleinere Teildreiecke zerlegt.

Hoffe, das hat jemanden interessiert.
 
Nico Madysa
17.07.2006  
 




Jac
de
Lad
Du kannst ja deinen Profan-Code noch zu Wikipedia dazuschreiben. Aber mir ist im Moment noch unklar wozu man das braucht, also eine praktische Anwendung fehlt irgendwie...

Jac

PS: Am Samstag war ich mal wieder bei meiner Freundin in Döbeln (seit 6 Wochen mal wieder) und Asterix hab ich am Sonntag geschaut (Kind war abgeschoben, Asterix kann immer!).
 
Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE)
Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP
17.07.2006  
 




Nico
Madysa
Ich sehe da auch keinen Sinn (außer dass ich meinen Info-Lehrer beeindrucken kann ). Ich war lediglich davon beeindruckt, dass sich sowas ohne Rekursion erzeugen lässt und habe mich an dem Abend wie ein Schneekönig gefreut.
 
Nico Madysa
19.07.2006  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

1.486 Betrachtungen

Unbenanntvor 0 min.
Peter Max Müller13.05.2015

Themeninformationen

Dieses Thema hat 2 Teilnehmer:

Nico Madysa (2x)
Jac de Lad (1x)


Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie