Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгоритм Форчуна.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
81.75 Кб
Скачать

Реализация алгоритма.

На входе мы имеем набор точек, входящих в область [O; S], для которых нужно построить диаграмму Вороного. Все точки должны быть уникальными. Данный алгоритм можно назвать «событийным».

Основа алгоритма – итерационная обработка событий. Событий в алгоритме два вида, событие точки и событие круга. Соответственно нам нужен список событий. Заметающая прямая опускается сверху вниз, от события к событию, поэтому нам нужен сортированный по высоте список событий.

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

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

Упорядоченный список событий точек.

std::vector<SiteEvent> mSiteEvents;

Упорядоченный список событий круга.

std::multiset<CircleEvent *, CircleEventComparator> mCircleEvents;

Источники информации:

  1. http://hijos.ru/2011/12/28/kazhdyj-v-svoej-oblasti-i-voronoj-dlya-vsex/

  2. https://en.wikipedia.org/wiki/Voronoi_diagram

  3. http://en.wikipedia.org/wiki/Fortune%27s_algorithm

  4. https://ru.wikipedia.org/wiki/Диаграмма_Вороного

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