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

Алгоритм

В качестве входных данных процедуры Graham выступает множество точек Q, где . В ней вызывается функция Top(S), которая возвращает точку, находящуюся на вершине стека S, не изменяя при этом его содержимое. Кроме того, используется также функция NextToTop(S), которая возвращает точку, расположенную в стеке S, на одну позицию ниже от верхней точки; стек S при этом не изменяется.

Graham(Q)

1) Пусть p0 — точка из множества Q с минимальной координатой y или самая левая из таких точек при наличии совпадений

2) Пусть — остальные точки множества Q, отсортированные в порядке возрастания полярного угла,

измеряемого против часовой стрелки относительно точки p0

(если полярные углы нескольких точек совпадают, то по расстоянию до точки p0)

3) Push(p0,S)

4) Push(p1,S)

5) for i = 2 to m do

6) while угол, образованный точками NextToTop(S),Top(S) и pi, образуют не левый поворот

(при движении по ломаной, образованной этими точками, мы движемся прямо или вправо)

7) do Pop(S)

8) Push(pi,S)

9) return S

Для определения, образуют ли три точки a, b и c левый поворот, можно использовать обобщение векторного произведения на двумерное пространство, а именно условие левого поворота будет выглядеть следующим образом: uxvyuyvx > 0, где

Алгоритмы построения отрезка — графические алгоритмы аппроксимации отрезка на дискретном графическом устройстве (растеризации), например, мониторе или принтере.

Стандартными требованиями к алгоритмам являются скорость работы, равномерная яркость и прямой вид полученных отрезков, совпадение начальных и конечных координат полученной и идеальной линии. Для дискретного устройства данные требования зачастую невыполнимы. Отрезок нельзя провести из одной точки в другую однозначно (кроме горизонтальных, вертикальных и наклонённых под углом 45° отрезков), начало и конец отрезка имеют координаты ближайших к ним пикселов, расстояние между пикселами диагональных отрезков больше, чем между пикселами вертикальных и горизонтальных.

Список алгоритмов рисования отрезков

  • Алгоритм DDA-линии — простой алгоритм, использующий вещественную арифметику.

  • Алгоритм Брезенхэма — оптимизированный алгоритм, использующий целочисленную арифметику и только операции сложения и вычитания.

  • Алгоритм Ву — модифицированный алгоритм Брезенхэма, обеспечивающий сглаживание.

Алгоритм Киркпатрика

Построение выпуклой оболочки методом «разделяй и властвуй» — алгоритм построения выпуклой оболочки.

Описание

Дано множество S, состоящее из N точек.

  1. Если |S| k0 (k0 — некоторое небольшое целое число), то построить выпуклую оболочку одним из известных методов и остановиться, иначе перейти к шагу 2.

  2. Разобьем исходное множество S произвольным образом на два примерно равных по мощности подмножества S1 и S2 (пусть S1 содержит N/2 точек, а S2 содержит N - N/2 точек).

  3. Рекурсивно находим выпуклые оболочки каждого из подмножеств S1 и S2.

  4. Строим выпуклую оболочку исходного множества как выпуклую оболочку объединения двух выпуклых многоугольников CH(S1) и CH(S2).

Поскольку: CH(S) = CH(S1 S2) = CH(CH(S1) CH(S2)), сложность этого алгоритма является решением рекурсивного соотношения T(N) 2T(N/2) + f(N), где f(N) — время построения выпуклой оболочки объединения двух выпуклых многоугольников, каждый из которых имеет около N/2 вершин. Далее будет показано, что T(N) = O(N logN).