Zufällige Pools oder Seen generieren

9

Ich habe Funktionen implementiert, die jede polygonale Form zeichnen können, konnte jedoch keine glatte Form erzeugen, die die abgerundeten Kanten eines Sees nachahmt. Ich habe versucht, zwei Kreise zu erzeugen und die Kanten zu verbinden, aber es gibt nicht genug Variation oder Glätte. Hat jemand Hinweise oder Ideen, die eine solche Form erzeugen könnten?

Manderin87
quelle
Ich habe mich mit Bezierkurven befasst, es scheint, dass ich daraus möglicherweise einen See erzeugen kann. Hat jemand Erfahrung mit ihnen auf einem 2d Array?
Manderin87

Antworten:

8

Immer erwähnt Perlin Lärm. So habe ich die Inselformen für den Polygonkartengenerator generiert:

  1. Perlin-Rauschen erzeugen.
  2. (x, y)Berechnen Sie für jeden Ort in der Rauschbitmap den Abstand vom Zentrum, normalisiert, sodass die Bitmap 2x2 ist : (dx, dy) = (2 * x / width - 1, 2 * y / height - 1); d = sqrt(dx*dx + dy*dy).
  3. Die Lage (x, y)ist Teil der Insel, wenn noise[x, y] > 0.3 + 0.4*d*d. Dieser Schritt versucht, die Form rund zu machen, indem Bereiche abgeschnitten werden, die weit von der Mitte entfernt sind.

Die Inseln sind etwas zerlumpter als die Seen, daher bin ich mir nicht sicher, ob diese Formen Ihren Wünschen entsprechen. Ich habe eine Demo des obigen Algorithmus erstellt , mit Schaltflächen unten, um die beiden magischen Zahlen zu steuern. Es kann unterschiedliche Werte der magischen Zahlen 0,3 und 0,4 geben, die Formen erzeugen, die Sie mögen.

amitp
quelle
2
Ihre Arbeit ist eine wichtige Inspiration, Amit. + 10.000, wenn ich könnte, für die ungefähr 5 Jahre des Staunens und der Freude, die ich beim Lesen Ihres Blogs hatte.
Ingenieur
4

Sie könnten einen Perlin Noise-Algorithmus verwenden, um die Seen für Sie zu generieren. Wenn Sie eine Ansicht von oben nach unten verwenden (Polygonform, klingt wie Sie), hat dieser Typ aus Stanford genau das getan.

http://www-cs-students.stanford.edu/~amitp/game-programming/polygon-map-generation/

immer
quelle
1
"Dieser Typ aus Stanford" ist auch ein Benutzer auf dieser Seite, FYI.
Ingenieur
wer ist nicht =) Ich gehe vielleicht von etwas Rauschen aus (Perlin, Fraktal), verwische aber die Ergebnisse für weniger "zackige" Ergebnisse. Toller Artikel, übrigens - ich liebe es, wie er die Flüsse macht.
Jari Komppa
0

Eine Möglichkeit wäre, mit einem einfachen Polygon zu beginnen, vielleicht nähern Sie sich Ihren 2 Kreisen.

Versetzen Sie zuerst alle Punkte nach dem Zufallsprinzip, damit sie nicht zu sehr wie ein Kreis aussehen. Teilen Sie sie dann für jede Kante in zwei Teile und versetzen Sie den Mittelpunkt um einen kleinen zufälligen Betrag. Machen Sie so weiter, bis Sie die erforderlichen Details haben.
Dies ist ähnlich wie beim Erzeugen von Blitzgabeln.

George Duckett
quelle