Создание случайных пулов или озер

Я реализовал функции, которые могут нарисовать любую многоугольную форму, однако я не смог создать гладкую форму, которая имитирует закругленные края озера. Я пробовал создавать два круга и присоединяться к краям, но для него не было достаточно вариаций или гладкости. У кого-нибудь есть указатели или идеи, которые могут генерировать такую ​​форму?

9 голосов | спросил Manderin87 10 Jam1000000amTue, 10 Jan 2012 11:52:27 +040012 2012, 11:52:27

3 ответа


8

alwynd упоминает шум Перлина. Вот как я создал формы острова для генератора карт многоугольника:

  1. Генерировать шум perlin.
  2. Для каждого местоположения (x, y) в растровом изображении шума вычислить расстояние от центра, нормализованное так, чтобы битмап был 2x2: (dx, dy) = (2 * x / width - 1, 2 * y / height - 1); d = sqrt(dx*dx + dy*dy) литий>
  3. Местоположение (x, y) является частью острова, если noise[x, y] > 0.3 + 0.4*d*d. Этот шаг пытается сделать форму круглой, отрезая области, которые находятся далеко от центра.

Острова немного более оборваны, чем озера, поэтому я не уверен, будут ли эти формы вам по душе. Я поставил демо выше алгоритма , с кнопками на снизу, чтобы управлять двумя магическими числами. Могут быть разные значения магических чисел 0,3 и 0,4, которые создают нужные вам фигуры.

ответил amitp 10 Jpm1000000pmTue, 10 Jan 2012 22:59:00 +040012 2012, 22:59:00
4

Вы можете использовать алгоритм Perlin Noise для создания озер для вас, если вы используете сверху вниз (форма многоугольника, такие звуки, как вы), этот парень из Стэнфорда сделал именно это.

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

ответил alwynd 10 Jpm1000000pmTue, 10 Jan 2012 15:43:20 +040012 2012, 15:43:20
0

Один из способов - начать с базового многоугольника, возможно, ваши 2 круга подходят.

Во-первых, смещение всех точек случайным образом, поэтому оно не выглядит слишком круто, как круг, затем для каждого ребра, разбивает его на 2 и смещает среднюю точку на некоторую небольшую случайную величину. Продолжайте делать это, пока у вас не будет необходимой детали.
Это похоже на то, что было сделано при создании вилок молнии.

ответил George Duckett 10 Jpm1000000pmTue, 10 Jan 2012 12:20:04 +040012 2012, 12:20:04

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132