2012-10-18 23 views
7

Grüße alle und alle!Wie werden L-Systeme für Straßennetze modifiziert?

Ich untersuche gerade prozedurale Generierung eines Straßennetzes und stolperte über den L-System-Algorithmus. Aus dem, was ich aus verschiedenen wissenschaftlichen Artikeln zu diesem Thema verstehe, und weiteren Abhandlungen über die Themen zu diesem Thema, wird der Algorithmus geändert, um "globale Ziele und lokale Beschränkungen" zu verwenden, in denen der eingegebene Pfad so modifiziert wird, dass er Eingabewerten wie Terrain entspricht und Bevölkerungsdichte. Jetzt verstehe ich diesen Teil oder zumindest das Gesamtkonzept, aber wie soll ich den Algorithmus ändern?

Im Moment habe ich eine Zeichenfolge, die nach bestimmten Regeln über Zeitschritte geändert wird. Ich analysiere dann die Saite und bewege mich und drehe, während ich durch die Zeichen gehe, rendere das Ergebnis und bekomme schöne Muster auf dem Bildschirm.

Jetzt, um ein Netzwerk von Hauptstraßen zu erstellen, sollte ich noch ein Basisaxiom mit einem Regelsatz verwenden und dann die Einschränkungen anwenden? Und wenn ja, wie könnte eine Reihe guter Startwerte und Regeln sein?

Oder sollte ich eher den grundlegenden Regelsatz durch die Beschränkungen und globalen Ziele ersetzen? Und wenn ja, was bleibt vom ursprünglichen L-System-Algorithmus?

Jede Hilfe wird sehr geschätzt, und für den Rekord mache ich das in C# und XNA, obwohl ich recon, das ist mehr auf einer theoretischen Ebene.

Vielen Dank für Ihre Zeit,

Karl

Antwort

7

Also, ich habe googeln worden, Lese und mehr in der letzten Woche zu verstehen, und ich habe eine Lösung für das Problem gefunden, das ich dachte, ich teile könnte. fand ich diese brillante Blog-Post, die im Grunde alles, was für mich gerade heraus:

http://www.newton64.ca/blog/?p=747#7472

Das Post ist auf einer anderen Blog-Post basiert hier gegründet:

http://mollyrocket.com/forums/viewtopic.php?t=730&sid=a9a2628b059a727cbde67309757ed178

Nun, so weit die L-System geht, ich bin mir nicht ganz sicher ob dieser Ansatz wirklich ein L-System ist. Sicher, es gibt Ähnlichkeiten in Bezug auf den iterativen Prozess des Netzwerkaufbaus. In L-Systemen wächst der String über Iterationen und Zweige werden mit "[" oder "]" erzeugt (zumindest in den Fällen, die ich gesehen habe), und im Ansatz nehme ich jetzt eine While-Schleife und eine Prioritätswarteschlange so ziemlich das Gleiche.

Ich möchte auch darauf hinweisen, dass ich die Papiere, die beschreiben, wie man ein L-System zur Erzeugung eines Straßennetzes benutzt, nicht vollständig verstanden habe, so dass meine Argumentation hier ein wenig abweichen könnte. Aber abgesehen von der Namensgebung und den Grenzen des Algorithmus habe ich eine Lösung gefunden, die für mich funktioniert, was für den Moment gut ist.

Glückliche Codierung!

Karl

+0

Bitte sehen Sie diese andere L-Systemfrage: http://stackoverflow.com/questions/15151958/procidental-generation-of-city-streets – Liam

+1

Beide Links sind leider jetzt nicht mehr verfügbar, aber ich konnte die finden früher auf der Wayback-Maschine, wenn es für zukünftige Leser von Nutzen ist: http://web.archive.org/web/20130827130016/http://www.newton64.ca/blog/?p=747 –

+0

Update - this könnte möglicherweise der fehlende molly rocket post sein - http://nothings.org/gamedev/l_systems.html –

5

Ich bin der Autor des obigen Blog-Post - froh, dass Sie es für sinnvoll! Ich kam nie zum Ende Ersatzteile - und wenn nichts anderes, ich hätte change the name - aber Sie haben mich wieder darüber nachdenken.

Sicher, der Algorithmus, den ich beschrieben habe, ist wahrscheinlich nicht mehr so ​​ein L-System; wichtig, aber ich denke, es ist ziemlich funktional gleichwertig.Ich bin ein Positivist, wenn es um die Programmierung geht, also wenn es funktioniert, kompilieren Sie es!

BEARBEITEN: Ich habe seit meiner alten Website, aber ich habe die Post here neu erstellt. Hoffe es ist immer noch hilfreich!

+0

Schön von dir zu hören. Vor allem, ich schätze, ich schulde dir jetzt ein Bier, und ich werde dir gerne eins kaufen, da dein Beitrag mein Problem gelöst hat. Zweitens sollten Sie wirklich Ersatzteile (mit einem anderen Namen) aufnehmen, klingt interessant. Ich mag deine Einstellung zum Kodieren. Ich neige dazu, das selbe zu tun. Ich habe mit den globalen Zielen und den lokalen Zwängen zu kämpfen, um ein ordentliches Straßennetz zu schaffen, und die Dinge kommen dorthin. Ich mag es wirklich, wie ein komplexes Problem in kleinere Teile einfacher Mathematik wie diese zerlegt wird. Danke noch einmal! –