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

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

Некоторые известные проблемы: -

  1. Проблема кратчайшего пути

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

Эта проблема легко сводится к преобразованию пространства в граф видимости и запуску алгоритма Дейкстры для поиска кратчайшего пути. Запуск этого алгоритма на реальном роботе будет ужасающим. Удары, отскок, уклонение - вам будет весело с ботом. Конечно, но это указывает на необходимость в более совершенном неоптимальном алгоритме, который поможет удовлетворить некоторые ограничения, такие как поддержание определенного расстояния от препятствий, минимальное количество поворотов, из них. Добро пожаловать в мир алгоритмов видимости!

2. проблема галереи классического искусства

Какое количество охранников, которых я могу разместить, будет достаточно, чтобы увидеть интерьер комнаты художественной галереи?
На конференции в 1976 году В. Клее впервые поставил проблему художественной галереи.
Chav ́atal показал, что для простого многоугольника n / 3 стационарных охранников
всегда достаточно, а иногда необходимо, чтобы видеть или охранять весь многоугольник.

Теперь давайте сделаем несколько отверстий в многоугольнике (часть внутри многоугольника, которая не позволяет нашим охранникам видеть сквозь них).

Задача минимального ограждения - найти минимальное количество ограждений для защиты многоугольника с отверстиями или без них. Ли и Лин доказали, что эта проблема является NP-трудной. Как кажущиеся простыми повседневные жизненные проблемы могут оказаться такими трудными!

Что вам следует знать: (алгоритмы и ресурсы)

Я дам обзор некоторых основных алгоритмов и некоторых полезных ресурсов для начала:

Обновите свою геометрию

Если вы новичок в геометрии или пересматриваете ее спустя долгое время, я предлагаю вам прочитать первую главу из Вычислительной геометрии текста О’Рурка на языке Си.

Триангуляция и разбиение

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

Оказывается, триангуляция многоугольника помогает решить массу задач в области вычислительной геометрии. Эта проблема была в центре внимания этой темы в течение многих лет. Существуют очень простые алгоритмы O (nlogn) для решения этой проблемы, которые были известны много лет. Давняя открытая проблема заключалась в том, существует ли алгоритм времени O (n). Проблема была решена Chazelle в 1991 году, но алгоритм настолько удивительно сложен, что он никогда не мог конкурировать с практичными, но асимптотически более медленными алгоритмами O (nlogn).

Техника Plane Sweep - еще один из наиболее распространенных методов, используемых в алгоритмах. Слайды в ссылке должны дать вам хорошее представление о том, что это такое.

O (nlogn) Triangulation Algorithm - отличный ресурс для глубокого изучения того, как работает алгоритм триангуляции. Возможно, вам понадобится время, чтобы проработать детали, так как есть много новых терминов и сложных деталей, но не волнуйтесь, вы все освоите.

Вычисление выпуклой оболочки

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

Некоторые из интересных и хороших алгоритмов вычисления выпуклой оболочки обсуждаются ниже:

Алгоритм Грэма [O (nlogn)]

Немного об ориентациях:

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

Таким образом, определение того, поворачиваются ли точки p, q, r налево или направо, является простым вычислением определителя.

Алгоритм

  1. Найдите крайнюю левую и крайнюю правую точку в данном нам наборе точек. Мы разделим задачу поиска выпуклой оболочки на поиск верхней выпуклой оболочки и нижней выпуклой оболочки по отдельности.

2. Отсортируйте точки по возрастанию координаты x.

3. Вставьте p1 и p2 в пустую стопку W.

4. для i = 3: n:

while (W.size≥2 && Orient (pi, H [top], H [top-1] ≤0)) pop W

нажмите пи

[Обратите внимание, что перемещение верхней части корпуса от p1 к pn представляет собой последовательность поворотов вправо в каждой вершине, лежащей между ними. Это свойство используется в алгоритме.]

Алгоритм Чана улучшил временную сложность до O (nlogh), где h - количество точек в выпуклой оболочке множества Point. Очень хорошее объяснение алгоритма Чана можно найти в теме Подробнее о выпуклой оболочке здесь.

Больше алгоритмов впереди:

  1. Выпуклая оболочка - объяснение
  2. График видимости
  3. Планирование пути робота
  4. Вычисление областей Вороного
  5. Слабая видимость