IvanovArtyom / Diamond-square

Реализация алгоритма Diamond-square из компьютерной графики для построения карт высот

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Diamond-square

Реализация алгоритма Diamond-square из компьютерной графики для построения карт высот. Программа генерирует случайный ландшафт на основе введенных пользователем данных и отображает его на экран, используя разные цвета. У пользователя есть возможность сохранить получившееся изображение и использовать его в своих нуждах.

Об алгоритме

Алгоритм Diamond-square начинает работу с двумерного массива размера $2^n + 1$. В четырёх угловых точках массива устанавливаются начальные значения высот. Шаги diamond и square выполняются поочередно до тех пор, пока все значения массива не будут установлены.

Одна итерация алгоритма Diamond-square на примере массива 5х5
Одна итерация алгоритма Diamond-square на примере массива 5х5

Шаг 1. Инициализация угловых точек. Присваивание им значений высот (например, выбором случайных чисел).
Шаг 2. Шаг diamond. Нахождение срединной точки, присваивание ей значения, на основе среднего от угловых точек, плюс случайное число.
Шаг 3. Шаг square. Нахождение срединных точек для ромбов, отмеченных черными точками (на этом шаге, по одной точке каждого ромба выходят за пределы массива). Плюс случайное число.

Случайное значение состоит из трёх переменных: R, L и Rand.

  1. R – фактор неровности (roughness factor) в промежутке от 0 до 1.
  2. L – длина между вершинами или размер текущего квадрата, который с каждой итерацией будет уменьшаться.
  3. Rand – функция, которая с равной вероятностью возвращает 1 или -1.

Соответственно, при каждой итерации случайное значение, прибавляющееся к срединным точкам, уменьшается, так как уменьшается размер квадрата.

Примечание:

В шагах diamond, точки, расположенные по краям общего массива, будут иметь только три соседних значения, а не четыре (четвертая точка будет выходить за размерность массива). Есть несколько способов справиться с этим – самое простое, взять среднее от трёх крайних точек. При последовательном использовании с указанием общих начальных значений, этот метод позволяет «сшивать» генерируемые карты высот.

Руководство пользователя

Руководство пользователя можно вызвать в самой программе при нажатии на знак вопроса в правом верхнем углу окна, а после на интересующий вас элемент. Руководство откроется на той странице, где описывается этот элемент. Так или иначе, далее здесь будет продублировано всё руководство пользователя для ознакомления.

Старт

Старт
Наиболее важная кнопка в программе. Запускает алгоритм, который генерирует карту высот, а затем отображает её на экран. После нажатия на кнопку «Старт» будут недоступны настройки программы, пока не будет вызвана кнопка «Очистка».

Сохранить

Сохранить
Кнопка «Сохранить» становится доступна после выполнения алгоритма. С её помощью можно сохранить полученное изображение.

Очистка

Очистка
Кнопка «Очистка» становится доступна после выполнения алгоритма. Стирает полученное изображение, снова делает доступными все настройки.

Изображение

Изображение
После того, как изображение было получено, можно кликнуть на него, чтобы разглядеть в деталях.

Разрешение

Разрешение
Позволяет выбрать разрешение изображения в пикселях.

Шероховатость

Шероховатость
Отвечает за скорость изменения рельефа, чем меньше, тем картинка будет изменяться плавней.

Высоты углов

Высоты углов
Для работы алгоритма Diamond-square необходимо установить начальные высоты в углах изображения, для этого были добавлены 4-е полосы прокрутки, которые позволяют задать высоту в метрах для соответствующего им угла.

Дополнительные настройки

Дополнительные настройки
Открывает окно с дополнительными настройками.

Выход

Выход
Для выхода из программы можно воспользоваться кнопкой «Выход», или просто закрыть окно приложения на крестик.

Настройка экстремальных точек

Настройка экстремальных точек
Экстремальные точки разделяют разные биомы по высоте. Согласно стандартным настройкам:

  1. высота океана и других глубоких точек изменяется от -3000 м. до -1001 м;
  2. высота моря и более мелких водоемов от -1000 м. до -1 м;
  3. высота равнин и небольших холмов от 0 м. до 999 м;
  4. высота гористой местности и гор от 1000 м. до 2899 м;
  5. горы покрыты снежными шапками начиная с 2900 м. до 3000 м.

Для изменения высот экстремальных точек были добавлены 5 элементов, которые позволяют выбрать число из определенного диапазона. Измененные настройки сохраняются даже после выхода из программы.

Настройка палитры

Настройка палитры
Палитра отвечает за цвета разных биом. Для изменения какого-либо цвета в палитре нужно кликнуть на него, после чего откроется диалоговое окно, где можно будет выбрать любой цвет:

  1. цвет 1 (-3000 м.) и 2 (-1001 м.) отвечает за начало и конец биома океана и других глубоких точек;
  2. цвет 3 (-1000 м.) и 4 (-1 м.) отвечает за начало и конец биома моря и более мелких водоёмов;
  3. цвет 5 (0 м.) и 6 (999 м.) отвечает за начало и конец биома равнин и небольших холмов;
  4. цвет 7 (1000 м.) и 8 (2899 м.) отвечает за начало и конец биома гористой местности и гор;
  5. цвет 9 (2900 м.) и 10 (3000 м.) отвечает за начало и конец биома гор, покрытых снежными шапками.

Цвета плавно изменяются по всей длине отрезка для каждого биома. Измененные настройки сохраняются даже после выхода из программы.

Настройки по умолчанию

Настройки по умолчанию
С помощью кнопки «Настройки по умолчанию» можно откатить все элементы, которые есть в этом окне, до стандартных настроек.

Примеры работы программы

Пример 1 Пример №1

Пример 2 Пример №2

Скачивание

Чтобы скачать приложение, перейдите по ссылке, там вы увидите 3 файла:

  • 1-ый файл - это исполняемый (exe) файл, если вам нужна только сама программа, то скачивайте его и запускайте;
  • 2-ой и 3-ий файлы - если вы хотите скачать все файлы для полноценной работы. Исполняемый (exe) файл будет находится по пути: Diamond-square-1.0.0\Diamond square\bin\Debug.

About

Реализация алгоритма Diamond-square из компьютерной графики для построения карт высот

License:MIT License


Languages

Language:C# 100.0%