Matthias Reitinger
ɐɯıǝɹ
Quiz #5
Terraforming
Regeln
Die Regeln und der Ablauf der Quizrunde können in der entsprechenden Ankündigung eingesehen werden. Bitte lest sie euch aufmerksam durch, da sie alle wichtigen Informationen enthält. Lösungsansätze können und dürfen auch schon vorab untereinander ausgetauscht und diskutiert werden, allerdings nicht öffentlich im Forum. Verwendet stattdessen bitte private Nachrichten oder schaut im Chat vorbei.
Abgabe
Die Abgabe erfolgt wie immer im Abgabeforum. Abgabefrist ist Sonntag, der 2. November 2008 um ca. 22 Uhr.
Das Problem
Wir schreiben das Jahr 2159. Die Technologie ist inzwischen soweit fortgeschritten, dass die Menschheit zu fremden Planeten in weit entfernten Sonnensystemen reisen und diese besiedeln kann. Dies funktioniert natürlich erst, nachdem der Planet an die natürlichen Bedürfnisse der Menschen angepasst worden ist (Terraforming). Dabei soll auch die Planetenoberfläche großflächig modifiziert werden. Der Chefentwickler für neue Planetenoberflächen der "United Terraforming Ltd." will sich nun seine Arbeit erleichtern und neue Terrains automatisiert und zufällig generieren. Deine Aufgabe ist es nun, ein entsprechendes Programm zu schreiben, das dies ermöglicht.
Das Programm soll dabei ein quadratisches Höhenfeld erzeugen. Ein Höhenfeld ist eine Datenstruktur, die zu jedem Koordinatenpaar (x,y) die Höhe des Terrains an dieser Stelle speichert. Die Größe (Seitenlänge) des Terrains soll vom Benutzer festgelegt werden können. Ihr dürft die möglichen Größen auch einschränken, wenn euer Algorithmus das verlangt (z.B. nur Zweierpotenzen). Die Ausgabe soll eine Visualisierung des zufallsgenerierten Höhenfeldes in Form eines Graustufen-Bildes sein. Je höher das Terrain, desto heller soll der entsprechende Pixel im Bild sein.
Wie ihr bei der Generierung des Terrains vorgeht, bleibt dabei ganz euch überlassen! Seid euch bewusst, dass es bereits einige Methoden gibt, aber schreckt auch nicht davor zurück, euch erst mal selber Gedanken über mögliche Ansätze zu machen. Damit ihr nicht ganz auf verlorenem Posten steht, werfe ich noch die beiden Stichworte "Diamond-Square-Algorithmus" und "Perlin Noise" in den Raum.
Falls die von euch gewählte Programmiersprache keine einfache Möglichkeit zur Bildausgabe bietet, könnt ihr auch ein Bild im sehr einfachen PPM-Format generieren.
Erweiterung
Überlegt euch eine alternative Farbcodierung des Höhenfeldes, die das generierte Bild z.B. wie eine Luftaufnahme aussehen lässt. Als weiteren Schritt könnt ihr das erzeugte Terrain "kachelbar" machen, d.h. man soll das Terrain beliebig oft in alle Richtungen wiederholen können, ohne dass unschöne "Brüche" entstehen. Wem danach immer noch langweilig ist, der kann das Höhenfeld dann noch triangulieren und das Resultat als 3D-Modell ausgeben (z.B. im Obj-Format).
Beispiele
Ein einfaches Terrain in Graustufendarstellung könnte so aussehen:

Eines (nicht kachelbares) Terrain in einer Farbcodierung vielleicht so:

Viel Spaß!
Terraforming
Regeln
Die Regeln und der Ablauf der Quizrunde können in der entsprechenden Ankündigung eingesehen werden. Bitte lest sie euch aufmerksam durch, da sie alle wichtigen Informationen enthält. Lösungsansätze können und dürfen auch schon vorab untereinander ausgetauscht und diskutiert werden, allerdings nicht öffentlich im Forum. Verwendet stattdessen bitte private Nachrichten oder schaut im Chat vorbei.
Abgabe
Die Abgabe erfolgt wie immer im Abgabeforum. Abgabefrist ist Sonntag, der 2. November 2008 um ca. 22 Uhr.
Das Problem
Wir schreiben das Jahr 2159. Die Technologie ist inzwischen soweit fortgeschritten, dass die Menschheit zu fremden Planeten in weit entfernten Sonnensystemen reisen und diese besiedeln kann. Dies funktioniert natürlich erst, nachdem der Planet an die natürlichen Bedürfnisse der Menschen angepasst worden ist (Terraforming). Dabei soll auch die Planetenoberfläche großflächig modifiziert werden. Der Chefentwickler für neue Planetenoberflächen der "United Terraforming Ltd." will sich nun seine Arbeit erleichtern und neue Terrains automatisiert und zufällig generieren. Deine Aufgabe ist es nun, ein entsprechendes Programm zu schreiben, das dies ermöglicht.
Das Programm soll dabei ein quadratisches Höhenfeld erzeugen. Ein Höhenfeld ist eine Datenstruktur, die zu jedem Koordinatenpaar (x,y) die Höhe des Terrains an dieser Stelle speichert. Die Größe (Seitenlänge) des Terrains soll vom Benutzer festgelegt werden können. Ihr dürft die möglichen Größen auch einschränken, wenn euer Algorithmus das verlangt (z.B. nur Zweierpotenzen). Die Ausgabe soll eine Visualisierung des zufallsgenerierten Höhenfeldes in Form eines Graustufen-Bildes sein. Je höher das Terrain, desto heller soll der entsprechende Pixel im Bild sein.
Wie ihr bei der Generierung des Terrains vorgeht, bleibt dabei ganz euch überlassen! Seid euch bewusst, dass es bereits einige Methoden gibt, aber schreckt auch nicht davor zurück, euch erst mal selber Gedanken über mögliche Ansätze zu machen. Damit ihr nicht ganz auf verlorenem Posten steht, werfe ich noch die beiden Stichworte "Diamond-Square-Algorithmus" und "Perlin Noise" in den Raum.
Falls die von euch gewählte Programmiersprache keine einfache Möglichkeit zur Bildausgabe bietet, könnt ihr auch ein Bild im sehr einfachen PPM-Format generieren.
Erweiterung
Überlegt euch eine alternative Farbcodierung des Höhenfeldes, die das generierte Bild z.B. wie eine Luftaufnahme aussehen lässt. Als weiteren Schritt könnt ihr das erzeugte Terrain "kachelbar" machen, d.h. man soll das Terrain beliebig oft in alle Richtungen wiederholen können, ohne dass unschöne "Brüche" entstehen. Wem danach immer noch langweilig ist, der kann das Höhenfeld dann noch triangulieren und das Resultat als 3D-Modell ausgeben (z.B. im Obj-Format).
Beispiele
Ein einfaches Terrain in Graustufendarstellung könnte so aussehen:

Eines (nicht kachelbares) Terrain in einer Farbcodierung vielleicht so:

Viel Spaß!
Zuletzt bearbeitet: