Generando piscinas o lagos al azar

9

He implementado funciones que pueden dibujar cualquier forma poligonal, sin embargo, no he podido generar una forma suave que imite los bordes redondeados de un lago. Intenté generar dos círculos y unir los bordes, pero no hay suficiente variación o suavidad. ¿Alguien tiene punteros o ideas que puedan generar una forma como esta?

Manderin87
fuente
He estado buscando curvas bezier, parece que podría generar un lago a partir de eso. ¿Alguien tiene alguna experiencia con ellos en una matriz 2D?
Manderin87

Respuestas:

8

Alwynd mencionó el ruido de Perlin. Así es como generé las formas de la isla para el generador de mapas poligonales:

  1. Generar ruido perlin.
  2. Para cada ubicación (x, y)en el mapa de bits de ruido, calcular la distancia desde el centro, normalizado de modo que el mapa de bits es 2x2: (dx, dy) = (2 * x / width - 1, 2 * y / height - 1); d = sqrt(dx*dx + dy*dy).
  3. La ubicación (x, y)es parte de la isla si noise[x, y] > 0.3 + 0.4*d*d. Este paso intenta redondear la forma cortando áreas que están lejos del centro.

Sin embargo, las islas son un poco más desiguales que los lagos, por lo que no estoy seguro de si estas formas serán de su agrado. He puesto una demostración del algoritmo anterior , con botones en la parte inferior para controlar los dos números mágicos. Puede haber diferentes valores de los números mágicos 0.3 y 0.4 que producen formas que le gustan.

amitp
fuente
2
Tu trabajo es una gran inspiración, Amit. + 10k si pudiera, durante los 5 años más o menos de asombro y diversión que he obtenido al leer su blog.
Ingeniero
4

Podrías usar un algoritmo de ruido Perlin para generar los lagos por ti, si estás usando una vista de arriba hacia abajo (forma de polígono, suena como si fueras), este chico de Stanford hizo exactamente eso.

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

alwynd
fuente
1
"Ese tipo de Stanford" también es un usuario de este sitio, para su información.
Ingeniero
quien no es =) Podría comenzar con algo de ruido (perlin, fractal), pero difuminar los resultados para obtener resultados menos "irregulares". Gran artículo, por cierto, me encanta cómo hace los ríos.
Jari Komppa
0

Una forma sería comenzar con un polígono básico, tal vez su enfoque de 2 círculos.

Primero, compensa todos los puntos al azar, por lo que no se parece demasiado a un círculo, luego, para cada borde, divídelo en 2 y compensa el punto medio por una pequeña cantidad aleatoria. Siga haciendo esto hasta que tenga los detalles requeridos.
Esto es similar a lo que se hace al generar horquillas de rayos.

George Duckett
fuente