Вычислительная геометрия
Вычислительная геометрия — раздел информатики, в котором рассматриваются алгоритмы для решения геометрических задач.
В ней рассматриваются такие задачи как триангуляция, построение выпуклой оболочки, определение принадлежности одного объекта другому, поиск их пересечения и т. п. Оперируют с такими геометрическими объектами как: точка, отрезок, многоугольник, окружность…
Вычислительная геометрия используется в распознавании образов, машинной графике, инженерном проектировании и т. д.
Векторная алгебра
Часто используются для численных манипуляций координаты точки и вектора.
Здесь рассмотрим случай обычной декартовой системы координат.
Длина вектора [math]\displaystyle{ \overrightarrow{a}=(x,y,z) }[/math] обозначается [math]\displaystyle{ |\overrightarrow{a}|=\sqrt{x^2+y^2+z^2} }[/math].
Для двух векторов [math]\displaystyle{ \overrightarrow{a}=(x_1,y_1,z_1) }[/math] и [math]\displaystyle{ \overrightarrow{b}=(x_2,y_2,z_2) }[/math] их сложение определяется как [math]\displaystyle{ \overrightarrow{a}+\overrightarrow{b}=(x_1+x_2,y_1+y_2,z_1+z_2) }[/math].
Умножение вектора [math]\displaystyle{ \overrightarrow{a}=(x,y,z) }[/math] на скаляр k определяется как [math]\displaystyle{ \overrightarrow{b}=k\overrightarrow{a}=(k x, k y, kz) }[/math]. При этом длина вектора меняется в [math]\displaystyle{ |k| }[/math] раз. Если k < 0, то направление вектора меняется на противоположное.
Скалярное произведение векторов [math]\displaystyle{ \overrightarrow{a}=(x_1,y_1,z_1) }[/math] и [math]\displaystyle{ \overrightarrow{b}=(x_2,y_2,z_2) }[/math] равно [math]\displaystyle{ x_1x_2+y_1y_2+z_1z_2 }[/math].
Векторное произведение векторов [math]\displaystyle{ \overrightarrow{a}=(x_1,y_1) }[/math] и [math]\displaystyle{ \overrightarrow{b}=(x_2,y_2) }[/math] равно [math]\displaystyle{ \left\{y_1 z_2 - z_1 y_2,~ z_1 x_2 - x_1 z_2,~ x_1 y_2 - y_1 x_2 \right\} }[/math]. Это единственная операция, где уменьшение размерности пространства не сводится к простому отбрасыванию третьей координаты (замене её нулём). Обычно для двумерных векторов значением векторного произведения берут третью координату соответствующих трёхмерных векторов: [math]\displaystyle{ x_1y_2-x_2y_1 }[/math].
Виды многоугольников (полигонов)
Многоугольник — замкнутая кривая на плоскости, состоящая из отрезков прямых линий. Отрезки называются сторонами многоугольника, а их концы — вершинами многоугольника.
Многоугольник называется простым, если он не пересекается сам с собой.
Многоугольник называется выпуклым, если все его внутренние углы меньше или равны 180 градусам.
Цепочка вершин называется монотонной, если любая вертикальная линия пересекает её не более одного раза. Многоугольник, составленный из двух таких цепочек называется монотонным.
Алгоритмы
Список примеров в этой статье не основывается на авторитетных источниках, посвящённых непосредственно предмету статьи. |
- Алгоритм сканирования Грэхема — трудоёмкость [math]\displaystyle{ O(n \log n) }[/math].
- Алгоритм быстрой оболочки — трудоёмкость [math]\displaystyle{ O(n^2) }[/math], [math]\displaystyle{ O(n \log n) }[/math] — в среднем.
- Алгоритм Киркпатрика — построение выпуклой оболочки набора точек на плоскости методом «разделяй и властвуй» через мосты. Трудоёмкость [math]\displaystyle{ O(n \log n) }[/math].
- Алгоритм заворачивания подарков (Джарвиса) — трудоёмкость [math]\displaystyle{ O(n h) }[/math], [math]\displaystyle{ h }[/math] — количество точек в выпуклой оболочке.
- Алгоритм Чена — трудоёмкость [math]\displaystyle{ O(n\log h) }[/math], [math]\displaystyle{ h }[/math] — количество точек в выпуклой оболочке.
- Алгоритм точки в многоугольнике — проверка принадлежности данной точки простому многоугольнику [math]\displaystyle{ O(n) }[/math].
- Метод луча — принадлежность точки простому многоугольнику [math]\displaystyle{ O(n) }[/math].
- Алгоритм Бентли — Оттманна — поиск всех точек пересечения отрезков на плоскости [math]\displaystyle{ O((n + k) \log n) }[/math], [math]\displaystyle{ k }[/math] — количество точек пересечения.
См. также
Литература
- Препарата Ф., Шеймос М. Вычислительная геометрия: Введение = Computational Geometry An introduction. — М.: Мир, 1989. — 478 с.
- Берг М., Чеонг О., Кревельд М., Овермарс М. Вычислительная геометрия. Алгоритмы и приложения = Computational Geometry: Algorithms and Applications. — М.: ДМК-Пресс, 2016. — 438 с. — ISBN 978-5-97060-406-9.
- Фокс А., Пратт М. Вычислительная геометрия. Применение в проектировании и производстве. — М.: Мир, 1982. — 304 с.
- Ласло М. Вычислительная геометрия и компьютерная графика на C++. — М.: БИНОМ, 1997. — 304 с.
- Скворцов А.В. Триангуляция Делоне и её применение. — Томск: Издательство Томского университета, 2002. — 128 с.
- Кормен, Томас Х., Лейзерсон, Чарльз И., Ривест, Рональд Л., Штайн, Клифорд. Глава 33. Вычислительная геометрия // Алгоритмы: построение и анализ = Introduction to Algorithms. — 2-e издание. — М.: «Вильямс», 2005. — С. 1047 — 1084. — ISBN 5-8459-0857-4.
- Mark de Berg, Marc van Kreveld, Mark Overmars, Otfried Schwarzkopf. Computational Geometry: Algorithms and Applications. — Springer, 2000. — 368 с.
- David M. Mount. Computional Geometry. — University of Maryland, 2002. — 122 с.
- Elmar Langetepe, Gabriel Zachmann. Geometric Data Structures for Computer Graphics. — A K Peters, 2006. — 362 с. — ISBN 1568812353.
- Hormoz Pirzadeh. Computational Geometry with the Rotating Calipers. — McGill University, 1999. — 118 с.
- Jacob E. Goodman, Joseph O'Rourke. Handbook of Discrete and Computational Geometry. — CRC Press LLC, 1997. — 956 с.
- Jianer Chen. Computational Geometry: Methods and Applications. — Texas A&M University, 1996. — 228 с.
- Joseph O'Rourke. Computational Geometry in C. — Cambridge University Press, 1998. — 362 с.
- A.R. Forrest. Computational Geometry. — series 4. — Proc. Royal Society London, 1971. — 321 с.
В статье есть список источников, но не хватает сносок. |
Эта статья должна быть полностью переписана. |