Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры по компьютерной графике [по вопросам].doc
Скачиваний:
84
Добавлен:
02.05.2014
Размер:
783.36 Кб
Скачать

Вопрос 30

Задачи вычислительной геометрии: задача о ближайшей паре. Метод «Разделяй и властвуй для плоского случая».

Алгоритмы типа "разделяй и властвуй"

В данном алгоритме в отличие от предыдущего множество S разбивается на два равномощных подмножества S и S', а затем ре­курсивно строятся отдельно оболочки для каждого из них и объеди­няются

СH(S )= CH(S ' S’’) = CH(H(S') CH(S'')).

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

Пусть есть выпуклые многоугольники P’ иP’. Требуется найти Р - их слияние. Для этого берется любая внутренняя точка р для P' и проверяется на принадлежность P’. Если она принадле­жит, то по теореме 4 мы имеем два множества, упорядоченных отно­сительно полярного угла к p. За время, равное сумме точек в них, можно из них получить один упорядоченный список, после чего, ис­пользуя обход Грэхема, за такое же время получить требуемый вы­пуклый многоугольник.

В случае, когда p не принадлежит Р , нужно найти левую и правую опорные прямые изp к P,pl иpr соответственно. Опорной прямой к выпуклому многоугольнику P будем называть прямую l, проходящую через некоторую вершину этого многоугольника таким образом, что внутренняя часть P находится по одну сторону от l. Для этого нам достаточно время O(N). Все вершины Р" между lиr при движении от l к r против часовой стрелки не рассматриваем и выпол­няем те действия, которые выполняли в случае принадлежности.

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

Задача о ближайшей паре

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

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

Для повышения эффективности применяются методы семейства «разделяй и властвуй».

Разобьем мно­жество точек пополам прямой

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

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

llmin=min(3,l4).

Вопрос 31

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

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

Для того, чтобы найти точку пересечения заданного луча с этой сферой, заменим величины x, y и z в последней формуле их выраже­ниями :

Приведем дан ное уравнение к виду

At2+Bt + C= 0

где

Если у уравнения нет вещественных корней, то нет пересе­чения луча со сферой.

Наименьший положительный корень этого уравнения определя­ет на луче ближайшую точку пересечения луча со сферой. Пусть t* такой корень. Тогда координаты точки M(x*,y*,z*) пересечения за­данного луча со сферой определяются по формулам:

а единичный вектор нормали в этой точке равен