JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=895f0fe6115fd5857f3f5eae2a57fdccMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Pythagorasbaum

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Projekte
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Cyianor
Super JLI'ler



Anmeldedatum: 23.12.2002
Beiträge: 452

Medaillen: Keine

BeitragVerfasst am: 26.12.2009, 19:23    Titel: Pythagorasbaum Antworten mit Zitat

Hallo zusammen!

Hab hier schon ewig nichts mehr reingestellt. Mein jetziges Projekt passt im Grunde auch nicht so gut hier rein, da es kein Spiel ist, aber die Inspiration dafür kommt hier aus dem Foum und deshalb wollte ich es euch auch zeigen. Ich habe vor kurzem auf dem MathePlaneten einen Artikel über so genannte Pythagorasbäume gefunden. Ich fand das ganze faszinierend und hab auch den Algorithmus in Java nachgebaut so wie in dem Artikel beschrieben. Allerdings ist mir dabei aufgefallen wie langsam Java rechnet bzw. zeichnet. Einen Pythagosbaum mit 15 Stufen zu zeichnen dauerte auf meinem MacBook (2,0 Ghz DualCore, 2GB RAM) 2 bis 3 Sekunden.
Nachdem ich hier im Forum bei Tutorials den Artikel von Otscho über Softwarerendering gelesen habe und den von xardias empfohlenen Bresenham Algorithmus in C implementiert hatte wollte ich wissen wie schnell ich denn nun einen Pythagorasbaum rendern kann. Ich war schon erstaunt wie schnell das jetzt alles läuft. Erst ab 17 Stufen bemerke ich eine ganz kleine Rechenpause. Bis dahin ist keine Verzögerung spürbar. Und selbst bis zu 20 Stufen berechnet das Programm innerhalb von knapp einer Sekunde. Und dabei ist das Programm noch nicht einmal in irgendeiner Weise optimiert.
Faierer Weise muss ich allerdings anmerken, dass ich unter Java gefüllte Rechtecke verwendet hatte. Das mag auch ein wenig das bessere Ergebnis der C Implementation erklären. Ich möchte aber sowohl gefüllte Polygone als auch Antialiasing in nächster Zeit in meiner Anwendung implementieren. Ich bin gespannt wie sich die Performance dann schlägt.

Nachdem ich das Programm ein wenig in der Gegend herum gezeigt habe wurde Begeisterung groß einen solchen Baum doch (natürlich nicht nur in Grün sondern vlt auch in anderen Farben oder auch in kräftiger werdendem Grün) als Bildschirmhintergrund zu bekommen. Ich möchte das Programm nun noch insofern erweitern, dass man interaktiv die Stufen von 1 bis 20 einstellen kann ohne das im Quellcode tun zu müssen und das man das Verhältnis der beiden jeweils neuen Quadrate zueinander frei wählbar zwischen 0.1 und 0.9 einstellen kann. Dazu möchte ich unter anderem GUI Elemente wie Buttons und Textlabel (bzw. deren Hintergrund) mit eigenen Algorithmen zeichnen und nicht auf irgendwelche Frameworks wie bspw. Quartz zurückgreifen.

Also genug gelabert. Hier mal ein Bild von dem Programm mit zufälligem grünem Farbton für jede Box und 15 Stufen.



Wer das Programm gerne mal selber ausprobieren will, der kann sich den Source Code hier herunterladen. Windows und Linux Nutzer lassen die beiden Dateien SDLmain.h und SDLmain.m einfach ungeachtet. Mac OS X Nutzer müssen die beiden Dateien mit kompilieren. Einzige Abhängigkeit des Programms ist die SDL. Ansonsten ist alles aus der C Standard Library.
Ein Hinweis vlt noch: Das Programm verwendet den C99 Standard. (Für den gcc ist das die Einstellung -std=c99) Ohne lässt sich das Programm nicht kompilieren.

Vlt ist es ja für den ein oder anderen interessant. Ich würde mich über Kommentare und Vorschläge freuen!

Schönen Gruß
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Kampfhund
Super JLI'ler


Alter: 42
Anmeldedatum: 20.07.2002
Beiträge: 408

Medaillen: Keine

BeitragVerfasst am: 26.12.2009, 20:53    Titel: Antworten mit Zitat

Ich persönlich finde es völlig ok wenn Projekte gepostet werden die keine Spiele sind oder sogar nichtmal eine grafische Ausgabe haben.

Wenn du es nicht schon kennst: Das Lindenmayer-System könnte dich eventuell interessieren.
_________________
Kochen ist ein NP-schweres Optimierungsproblem.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Cyianor
Super JLI'ler



Anmeldedatum: 23.12.2002
Beiträge: 452

Medaillen: Keine

BeitragVerfasst am: 27.12.2009, 13:52    Titel: Antworten mit Zitat

@Kampfhund: Vielen Dank für den Hinweis! Kannte das Lindenmayer - System noch nicht. Klingt aber sehr interessant, werd mir das in nächster Zeit mal genauer anschauen.

Hab ein kleines Update:

Hab jetzt einen Scanline Algorithmus eingebaut um gefüllte Polygone zeichnen zu können. Das sieht dann so aus:

(Farben zufällig, 5 Stufen, 0.3 Verhältnis)


Das ganze ist immer noch um einiges effizienter als die Implementation in Java. Ich bemerke momentan auf meinem MacBook bis zu 14 Stufen keinerlei Verzögerung und erst ab Stufe 15 ist mir eine ganz kleine Rechenpause aufgefallen. Auch 20 Stufen werden in knapp 2 Sekunden berechnet. Also etwa so schnell wie Java braucht um 15 Stufen zu berechnen.

Meine Ziele für die folgende Version sind:
- Transparenz
- Farbverläufe: bspw. fängt der Baum am Stamm (erstes Quadrat) braun an und die Farbe verläuft dann in immer kräftiger werdendes grün. Also so eine Art Gradient Funktion wie man sie aus Graphikprogrammen kennt. Kennt da jemand einen guten Artikel dazu?

Schönen Gruß

[EDIT] Achja, Source Code gibts auch wieder für die, die's interessiert:
Download
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Cyianor
Super JLI'ler



Anmeldedatum: 23.12.2002
Beiträge: 452

Medaillen: Keine

BeitragVerfasst am: 28.12.2009, 00:03    Titel: Antworten mit Zitat

Ganz kleines Update:

Hab eine kleine Probeanwendung geschrieben um meine Funktion für lineare Farbverläufe zu testen. Funktioniert wunderbar:


Man muss lediglich eine Start- und eine Endfarbe angeben und wie viele Farbschritte man möchte und erhält dann ein Array mit den Farben in der angegebenen Anzahl zurück.

Allerdings bin ich mit dem linearen Verlauf noch nicht zufrieden. Ich würde die Farben gerne mehr auf eine Seite gewichten. In dem Beispiel von oben also länger im Braunbereich bleiben bevor es ins Grüne übergeht. Muss mir erst noch Gedanken machen wie man das machen könnte. Aber das kommt morgen.

Gut Nacht!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Cyianor
Super JLI'ler



Anmeldedatum: 23.12.2002
Beiträge: 452

Medaillen: Keine

BeitragVerfasst am: 30.12.2009, 00:02    Titel: Antworten mit Zitat

So, das Problem mit den gewichteten Farbverläufen ist auch geklärt:

Schwarz nach Weiß mit 30%iger Gewichtung nach rechts


Braun nach Grün mit 20%iger Gewichtung nach rechts


Da ich die Farbverläufe nicht gleich in meine Hauptanwendung einbauen wollte hab ich mir zuerst eine kleine Testanwendung gebaut (Gradient Tester). Der nächste Schritt wird es sein die Farbverläufe auch in meine Hauptanwendung einzubauen. Wer sich dafür interessiert wie ich die Farbverläufe berechne sollte sich den Thread über mein Projekt im C/C++ Forum durchlesen. Da hab ich mein Verfahren genau beschrieben.

Ansonsten hab ich den Source Code leicht verbessert (Fehler ausgebessert) und dem Packet jetzt ein Xcode 3.2 Projekt, ein Dev-C++ Projekt und ein Makefile hinzugefügt. Ein Projekt für Visual C++ zu erstellen war mir zu kompliziert, da der MVC++ Compiler mit C99 nicht zurecht kommt und ich mein Projekt deswegen nicht umschreiben wollte. Fehlerfreies kompilieren auf Windows ist also momentan nur mit dem MinGW möglich.
Hier könnt ihr euch den Source Code herunterladen: Download

Schönen Abend/Nacht noch!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Projekte Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum