[QUIZ#5] Terraforming

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:
heightmap.jpg

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

Viel Spaß!
 
Zuletzt bearbeitet:

Sven Mintel

Mitglied
Spannende Sache :eek:

Leider habe ich keine Zeit mitzumachen, aber auf die Resultate freue ich mich schon diebisch,
besonders auf die JS-Lösung von OnlyFoo :) (ich werde den Prozessor schon mal vorkühlen :suspekt: )
 

OnlyFoo

Erfahrenes Mitglied
Spannende Sache :eek:

Leider habe ich keine Zeit mitzumachen, aber auf die Resultate freue ich mich schon diebisch,
besonders auf die JS-Lösung von OnlyFoo :) (ich werde den Prozessor schon mal vorkühlen :suspekt: )

Hey... Woher... Naja das war auf jedenfall tatsächlich mein Plan... Zusammen mit dem Rasterizer, den ich damals für den Tutorials 5k-Wettbewerb geschrieben hab, könnte ich die Ausgabe in 3d generieren... Naja morgen mal schauen, ich muss nun erstmal Schlafen...
 

Dennis Wronka

Soulcollector
Oh, da muss ich mal in meinen alten Codes wuehlen. Sowas hatte ich mal in Pascal und in Assembler geschrieben, vor langer, langer Zeit.

Weiss aber nicht ob ich den Kram noch hab.
 
Ach, jetzt hab ich ganz vergessen abzugeben... dabei hatte ich doch schon von Anfang an eine fertige Lösung parat. Wer ist noch aller dafür, dass wir die Abgabefrist diesmal um 24h verlängern (wegen Feiertag am Wochenende, überraschende Ankündigung etc.)? :D
 
So, ich hab dann meinen Code auch mal abgabefertig gemacht und abgegeben. Will sonst niemand mehr abgeben?

Für diejenigen, die schon mal teilgenommen und dieses Quiz jetzt ausgelassen haben: was war der Grund? Keine oder zu wenig Zeit? Zu spät mitbekommen, dass die neue Runde läuft? Aufgabe zu schwer? Eure Meinung würde mich wirklich interessieren, denn nur so weiß ich, wie ich den Schwierigkeitsgrad in Zukunft wählen soll.

Grüße,
Matthias

PS: Ich freue mich natürlich auch nachwievor über Vorschläge zu Quiz-Aufgaben von eurer Seite. Bis jetzt kam da leider nicht recht viel und ich befürchte, dass ohne eure Mithilfe das Quiz nur noch in unregelmäßigen Abständen stattfinden kann.
 

Dennis Wronka

Soulcollector
Also bei mir ist Zeit in letzter Zeit sehr knapp, und zudem hab ich auch noch vergessen meinen alten Code zu durchwuehlen.

Wuerde auf jeden Fall gern weiter hier ein Coding-Quiz sehen und, wenn's die Zeit erlaubt, auch wieder mitmachen.
 

colblake

Erfahrenes Mitglied
Hallo,
ich hätte da noch einen eigenen Ansatz. Ich weis, ich bin etwas spät dran, aber vlt. interessiert es doch jemand.
Leider kann ich nicht in das Diskussionsforum posten. Da steht immer dass ich keine Berechtigung hätte :(


Was kann ich da tun?

Gruß
Col.Blake