Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
73
Добавлен:
18.03.2016
Размер:
264.35 Кб
Скачать

Построение выпуклой оболочки по Грехэму

Центр координат в какой-нибудь внутренней точке. Упорядочим точки относительно полярного угла, если таковые совпадают относительно расстояния от центра координат.

Сущность алгоритма в последовательном просмотре отсортированного списка и удалении внутренних вершин.

Обходим список, начиная с начальной точки, против часовой стрелки и проверяем внутренний угол для текущей

точки. Если он больше либо равен π, то удаляем вершину, в противном случае переходим к следующей.

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

Быстрые методы построения выпуклой оболочки

Задача о ближайшей паре — одномерный случай

Постановка задачи: задано N точек, необходимо найти пару наиболее близких точек.

Простейший алгоритм заключается в переборе всех пар точек и сравнении расстояний между ними. Всего N(N-1) пар, таким образом, сложность алгоритма O(N2).

l1

l3

 

l2

 

 

 

 

 

 

lmin = min(l1,l2 ,l3 )

Если множество точек делится прямой пополам, то общее количество сравнений равно:

Задача о ближайшей паре — двумерный случай

l3=min(l1,l2)

l1

l2

 

l3 l3

Найдем ближайшую пару в каждой половине (например, простым перебором), пусть минимальные расстояния соответственно равны l1 и l2. Для объединения решений необходимо учесть расстояние между точками, ближайшими к линии. Для этого найдем минимальное из

двух расстояний l3 = min(l1,l2 ) .

Проведем параллельно разбивающей прямой две прямые на расстоянии l3 от нее. Среди точек, попавших в получившиеся полосы, найдем ближайшую пару l4.

lmin = min(l3 ,l4 ).

Вычисления точек пересечений

Пусть луч задается двумя точками, через которые он проходит, с координатами (x0,y0,z0) и (x1,y1,z1).

Луч можно описать с помощью параметрических уравнений:

Пересечение луча со сферой

Сфера радиуса r c центром в точке C(xc, yc, zc) описывается уравнением вида:

 

(x x )2

+ ( y y

c

)2 + (z z

c

)2 = r2

 

 

 

c

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(x + lt x )2 + ( y + mt y

c

)2 + (z

0

+ nt z

c

)2

= r2

0

c

0

 

 

 

 

 

 

 

 

 

 

 

 

где

At2 +

Bt + C =

0

 

 

 

 

 

 

 

 

 

 

A = l2 + m2 + n2 ;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

B = 2(x0 xc )l + 2( y0 yc )m + 2(z0 zc )n;

 

 

 

 

C = (x x )2 + ( y y

)

2 + (z

0

z

)2 r2 .

 

 

 

 

0

c

0

 

c

 

 

 

 

 

c

 

 

 

 

 

 

 

x* =

x0 +

 

lt*;

 

 

 

 

 

 

 

 

 

 

 

y* =

y0 +

 

mt*;

 

 

 

 

 

 

 

 

 

 

 

z* =

z0 +

nt*;

 

 

 

 

 

 

 

 

 

Соседние файлы в папке Брундасов. Компьютерная графика. Лекции