Softwareprojekte
IRC Quizbot
Der Quizbot ist schon ein älteres Projekt von Enrico und mir. Zwar haben wir zunächst ein eigenes Framework für den Bot erstellt, dennoch entschieden wir uns im späteren Entwicklungsverlauf für das Framework des Pircbots. In Verbindung mit einer MySQL Datenbank werden Fragen gestellt, Rankings gelistet und viele weitere Kleinigkeiten ermöglicht. Mehr Informationen zum Projekt und den Sourcecode gibt es unter http://javaforge.com/project/2237
Visualisierung von Graham Scan
Screenshot der Applikation
Der Graham Scan ist ein Algorithmus zur Berechnung der konvexen Hülle aus einer Punktmenge in der Ebene. Der Algorithmus arbeitet wie folgt: Zuerst wird der Punkt mit der geringsten Y-Koordinate gesucht, danach wird der Punkt mit der geringsten Y-Koordinate (0-Punkt) von allen Punkten subtrahiert, diese Punkte werden dann nach ihrem Winkel sortiert. Der 0-Punkt wird dann wieder zu allen Punkten addiert. Für jeden Punkt wird ein Test durchgeführt. Es wird getestet, ob der Punkt links oder rechts vom 0-Punkt liegt (auch Knicktest oder Orientierungstest genannt) Damit werden die konkaven Ecken überbrückt. zum Projekt »
Visualisierung von Flood Fill
Das Projekt entstand in Zusammenarbeit mit Andreas Wiedemann. Wir hatten uns zum Ziel gesetzt einen Computergraphik-Algorithmus zu Visualisieren, dabei gefiel uns der häufig verwendete Flood-Fill Algorithmus am besten. Das Projekt wurde in Java implementiert. Nach gründlicher Planung haben wir das Applet geschrieben, und noch einige zusätzliche Funktionen eingebaut. Hier eine Übersicht der Programmfunktionen:
- Datenstruktur für das Gitterraster zur besseren Visualisierung der Pixel
- freie Wahl von Vorder und Hintergrundfarbe
- Rasteralgorithmus für Kreise und Rechtecke verschiedener Grösse
- Wahl zwischen verschiedenen Füllmodi zur Visualisierung
Zur Projektseite, welche alle Informationen von Pflichtenheft bis Klassendiagramme beinhaltet, kommen geht es hier.
OpenGl Terrain-Scene
Die Grundidee hatte ich Anfang 2005, zu einer Übungsaufgabe sollte man eine Szene in OpenGl entwerfen, auf NeHe Productions gibt es sehr viele gute Tutorials, wobei unter anderem auch erklärt wird wie man eine Heightmap erstellt. Desweiteren wollte ich *.obj Dateien importieren, um 3d Modelle direkt zu nutzen, dazu benutzte ich eine Schnittstelle von Nate Robins. Schnell einen Baum modelliert, 3 Lichtquellen gesetzt und schon war sie fertig, meine Winterszene
![]()
![]()
![]()
![]()
Später habe ich das ganze nocheinmal komplett neu gemacht um den Umgang mit C++ und OpenGl zu vertiefen, mittlerweile hat das Programm folgende Features:
- Eigene Lichtklasse, zum Erzeugen beliebiger Lichtquellen
- Klasse zur Darstellungen von Texten auf dem Desktop
- einen FrameCounter
- dynamisches Einlesen von *.raw Dateien zum erstellen der Heightmap
- Texture Mapping
- volumetrischer Nebel
- selbstdefinierte Vector Klasse für die Berechnungen (später noch Schatten)
Region Growing
Das Programm entstand im 2. Semester zu dem Fach Algorithmen & Datenstrukturen des Studiengangs Computervisualistik. Es war ein Beleg, den ich mir damals ausgesucht habe. Die Umsetzung erfolgte in Java. Das Programm besteht derzeit aus 9 Klassen und ist eine eigenständige Applikation. Da dieses Programm zur Abnahme nicht besonders Umfangreich sein musste, habe ich es so einfach wie möglich gehalten.
Später wurde es auf folgende Funktionen erweitert:
- Erweiterbares Menü
- Trennung von GUI und Programm
- Farbauswahl über einen Dialog (JColorchooser)
- dynamisches Einlesen von Dateien (IOstream, Load Dialog)
- speichern des Resultatbildes an einem gewünschten Ort (Save Dialog)
- Schwellwertbestimmung der Region, per manueller Eingabe
- Informationsfenster,Einstellungs-Dialog
- Zusätzlich ist noch die Möglichkeit gegeben ein Intensitätsbild zu erstellen
Der Algorithmus basiert auf einem rekursivem Aufruf aller vom Startpunkt ausgehenden Nachbarpixel. Er wird jedoch nicht rekursiv implementiert, weil es zu einem Speicherüberlauf kommt, wenn die zu füllende Fläche zu gross wird.
Stattdessen wurde eine Queue mit Hilfe einer LinkedList eingesetzt.