Вычислительная геометрия

Вычислительная геометрия — раздел информатики, в котором рассматриваются алгоритмы для решения геометрических задач. В ней рассматриваются такие задачи как триангуляция, построение выпуклой оболочки, определение принадлежности одного объекта другому, поиск их пересечения и т. п. Оперируют с такими геометрическими объектами как: точка, отрезок, многоугольник, окружность\ldots Вычислительная геометрия используется в распознавании образов, машинной графике, инженерном проектировании и т. д.

Векторная алгебра

Часто используются для численных манипуляций координаты точки и вектора. Здесь рассмотрим случай обычной декартовой системы координат. Длина вектора a=(x,y,z) обозначается |a|=x2+y2+z2. Для двух векторов a=(x1,y1,z1) и b=(x2,y2,z2) их сложение определяется как a+b=(x1+x2,y1+y2,z1+z2). Умножение вектора a=(x,y,z) на скаляр k определяется как b=ka=(kx,ky,kz). При этом длина вектора меняется в |k| раз. Если k \textless 0, то направление вектора меняется на противоположное. Скалярное произведение векторов a=(x1,y1,z1) и b=(x2,y2,z2) равно x1x2+y1y2+z1z2. Векторное произведение векторов a=(x1,y1) и b=(x2,y2) равно {y1z2z1y2,z1x2x1z2,x1y2y1x2}. Это единственная операция, где уменьшение размерности пространства не сводится к простому отбрасыванию третьей координаты (замене её нулём). Обычно для двумерных векторов значением векторного произведения берут третью координату соответствующих трёхмерных векторов: x1y2x2y1.

Виды многоугольников (полигонов)

Многоугольник — замкнутая кривая на плоскости, состоящая из отрезков прямых линий. Отрезки называются сторонами многоугольника, а их концы — вершинами многоугольника. Многоугольник называется простым, если он не пересекается сам с собой. Многоугольник называется выпуклым, если все его внутренние углы меньше или равны 180 градусам. Цепочка вершин называется монотонной, если любая вертикальная линия пересекает её не более одного раза. Многоугольник, составленный из двух таких цепочек называется монотонным.

Алгоритмы


  • Алгоритм сканирования Грэхема — трудоёмкость O(nlogn).
  • Алгоритм быстрой оболочки — трудоёмкость O(n2), O(nlogn) — в среднем.
  • Алгоритм Киркпатрика — построение выпуклой оболочки набора точек на плоскости методом «разделяй и властвуй» через мосты. Трудоёмкость O(nlogn).
  • Алгоритм заворачивания подарков (Джарвиса) — трудоёмкость O(nh), h — количество точек в выпуклой оболочке.
  • Алгоритм Чана — трудоёмкость O(nlogh), h — количество точек в выпуклой оболочке.
  • Алгоритм точки в многоугольнике — проверка принадлежности данной точки простому многоугольнику O(n).
  • Метод луча — принадлежность точки простому многоугольнику O(n).
  • Пересечение отрезков — (алгоритм Бентли-Оттманна) поиск всех точек пересечения отрезков на плоскости O((n+k)logn), k — количество точек пересечения.