{"id":132,"date":"2007-10-13T09:09:24","date_gmt":"2007-10-13T08:09:24","guid":{"rendered":"http:\/\/blog.sahits.ch\/?p=132"},"modified":"2017-12-24T21:42:29","modified_gmt":"2017-12-24T20:42:29","slug":"generieren-einer-landschaft","status":"publish","type":"post","link":"http:\/\/sahits.ch\/blog\/blog\/2007\/10\/13\/generieren-einer-landschaft\/","title":{"rendered":"Generieren einer Landschaft"},"content":{"rendered":"<p>Seit l\u00e4ngerem versuche ich einen vern\u00fcnftigen Algorithmus zu entwickeln, um eine bin\u00e4re Landschaft zu erzeugen. Bin\u00e4r daher, da ich wissen m\u00f6chte was ist Land und was ist Meer. Eine reine Zufallsverteilung f\u00fchrt dazu dass viele kleine &#8222;Inseln&#8220; entstehen. Dies bedeutet, dass bei der Entscheidung ob ein Feld Wasser oder Land ist eine Gewichtung einfliessen muss. Diese Gewichtung muss dazuf\u00fchren, dass sich gleich zu gleich gesellt.<!--more--><br \/>\nIm Netz finden sich einige Ans\u00e4tze, die ein Vorgehen beschreiben, einige bringen sogar Code mit. Dabei ist die Erstellte Landschaft jedoch direkt in Graphik umgesetzt:<\/p>\n<ul>\n<li><a href=\"http:\/\/www.nbb.cornell.edu\/neurobio\/land\/OldStudentProjects\/cs490-94to95\/nell\/doc\/doc.html\">Fraktale Landschaft mit openGL und Code<\/a><\/li>\n<li><a href=\"http:\/\/local.wasp.uwa.edu.au\/~pbourke\/modelling_rendering\/planets\/\">Planeten Modellieren<\/a><\/li>\n<\/ul>\n<p>Folgende Ans\u00e4tze sind mir als M\u00f6glichkeiten eingefallen:<\/p>\n<ul>\n<li>Genetischer Ansatz: Ausgehend von einer vorhandenen Landschaft, wird die K\u00fcstenlinie zuf\u00e4llig mutiert. Nach einigen Mutationen entsteht eine neue Landschaft. Dabei muss auch dem Umstand Rechnung getragen werden, dass neue Inseln entstehen k\u00f6nnen, Beispielsweise durch erstellen von Mini-Inseln (Nucleoli) zu Beginn der Mutation.<\/li>\n<li>Wachstums-Ansatz: Ausgehen von einer zuf\u00e4lligen Anzahl Nucleoli (untere Grenze definieren) Land wachsen lassen. Dies simuliert gewissermassen die Entstehung von Land aufgrund vulkanischer Aktivit\u00e4t. Diesen Ansatz habe ich verfolgt. Weitere Details siehe unten.<\/li>\n<li>Elevation Ansatz: Dieser ist auch im <a href=\"http:\/\/www.nbb.cornell.edu\/neurobio\/land\/OldStudentProjects\/cs490-94to95\/nell\/doc\/doc.html\">obigen Link<\/a> beschrieben. Dabei wird die Fl\u00e4che durch eine Linie geteilt. Alle Punkte auf einer Seite werden um 1 angehoben, alle anderen um 1 abgesenkt. Dies f\u00fchrt dazu dass alles was nach x Iterationen unter 0 ist zum Mehr wird alles dar\u00fcber zu Land. Da dieser Ansatz den Mehrwert bietet, dass sich daraus auch Gebirge und H\u00fcgel ableiten lassen habe ich auch diesen versucht, &#8211; meine Programm-adaption muss jedoch irgendwo eine Schachstelle aufweisen, da 1. keine Verteilung um 0 entsteht und 2. Immer eine grosse Landmasse der Form &#8222;X&#8220; entsteht. Der Urspr\u00fcngliche Algorithmus ist f\u00fcr eine Kugel gedacht, was sich in openGL leicht umsetzen l\u00e4sst. Auf eine Fl\u00e4che adaptiert, die einer zylindrischen Welt entspricht muss jede Linie, die die horizontale und vertikale Kante kreuzt gespiegelt werden. Dies gilt ebenfalls f\u00fcr die zu erh\u00f6henden\/abzusinkenden Fl\u00e4chen. Linien die beide vertikalen Seiten kreuzen m\u00fcssten eigentlich auch gespiegelt werden, was ich nicht gemacht habe, da dies durch eine zuf\u00e4llige Wahl und gen\u00fcgend Iterationen ausgeglichen werden sollte.<br \/>\nDieser Algorithmus l\u00e4sst sich vereinfachen indem nur horizontale und Vertikale Linien verwendet werden. Dadurch ist auch sichergestellt, dass jedes Feld eindeutig der einen oder anderen Seite zugeordnet werden kann.<\/li>\n<li>Tektonischer Ansatz: Ausgehend von einer einzigen Landmasse werden zuf\u00e4llige Trennlinien definiert. Dadurch entstehen x Teilst\u00fccke. F\u00fcr jedes Teilst\u00fcck wird nun ein Bewegungvektor weg von der Mitte definiert. Dann wird die tektonische Plattenverschiebung f\u00fcr t simuliert. Dies kann auch zu Gebirgsbildung f\u00fchren.<\/li>\n<li>Graphitonischer Ansatz: Gestartet wird mit einer zuf\u00e4lligen Verteilung. Jede Landmasse besitzt eine graphitonische Anziehung auf alle anderen. Die Anziehungskraft ist abh\u00e4ngig von der Gr\u00f6sse und der Entfernung. Zudem gibt es so etwas wie Tr\u00e4gheit, die verhindert dass aus all den kleinen Landeinheiten eine grosse wird.<\/li>\n<\/ul>\n<p>Beim Wachsumsansatz bin ich wie folgt vorgegangen. Das Wachstum wird f\u00fcr jede Runde f\u00fcr alle Nucleoli simuliert. Je mehr Felder bereits definiert sind, umso mehr Felder werden Pro Runde definiert, n\u00e4mlich genau 4*((Runde-1)*2+1)+4, wobei Runde zu Beginn 0 ist.<br \/>\nZu beachten ist: Wenn man f\u00fcr das Feld, das in der Vorrunde als erstes erstellte Feld w\u00e4hlt so ergibt sich ergibt sich eine Land Verteilung in dieser Richtung. Daher sollte f\u00fcr jede Runde ein neues Startfeld gew\u00e4hlt<br \/>\n<a href='http:\/\/www.sahits.ch\/blog\/wp-content\/uploads\/2007\/10\/landscapediag.gif' title='Landscape with diagonal drift'><img src='http:\/\/www.sahits.ch\/blog\/wp-content\/uploads\/2007\/10\/landscapediag.thumbnail.gif' alt='Landscape with diagonal drift' \/><\/a>werden.<br \/>\nWenn die Felder in der richtigen Reihenfolge definiert werden (Ost, West, S\u00fcd, Nord, Diagonal) sollte eine einigermassen Ansprechende Verteilung entstehen.<br \/>\n<a href='http:\/\/www.sahits.ch\/blog\/wp-content\/uploads\/2007\/10\/landscapebin.gif' title='Bin\u00e4re Landschaft'><img src='http:\/\/www.sahits.ch\/blog\/wp-content\/uploads\/2007\/10\/landscapebin.thumbnail.gif' alt='Bin\u00e4re Landschaft' \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Seit l\u00e4ngerem versuche ich einen vern\u00fcnftigen Algorithmus zu entwickeln, um eine bin\u00e4re Landschaft zu erzeugen. Bin\u00e4r daher, da ich wissen m\u00f6chte was ist Land und was ist Meer. Eine reine Zufallsverteilung f\u00fchrt dazu dass viele kleine &#8222;Inseln&#8220; entstehen. Dies bedeutet, dass bei der Entscheidung ob ein Feld Wasser oder Land ist eine Gewichtung einfliessen muss. &hellip; <a href=\"http:\/\/sahits.ch\/blog\/blog\/2007\/10\/13\/generieren-einer-landschaft\/\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eGenerieren einer Landschaft\u201c <\/span>weiterlesen<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7,6],"tags":[19,99,29,301,30],"class_list":["post-132","post","type-post","status-publish","format-standard","hentry","category-java","category-programmieren","tag-datenstruktur","tag-de","tag-generisch","tag-java","tag-landschaft"],"_links":{"self":[{"href":"http:\/\/sahits.ch\/blog\/wp-json\/wp\/v2\/posts\/132","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/sahits.ch\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/sahits.ch\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/sahits.ch\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/sahits.ch\/blog\/wp-json\/wp\/v2\/comments?post=132"}],"version-history":[{"count":5,"href":"http:\/\/sahits.ch\/blog\/wp-json\/wp\/v2\/posts\/132\/revisions"}],"predecessor-version":[{"id":2581,"href":"http:\/\/sahits.ch\/blog\/wp-json\/wp\/v2\/posts\/132\/revisions\/2581"}],"wp:attachment":[{"href":"http:\/\/sahits.ch\/blog\/wp-json\/wp\/v2\/media?parent=132"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/sahits.ch\/blog\/wp-json\/wp\/v2\/categories?post=132"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/sahits.ch\/blog\/wp-json\/wp\/v2\/tags?post=132"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}