Автор: Пользователь скрыл имя, 02 Октября 2011 в 22:47, лекция
Векторы и операции над ними
Векторы
Прямые
Отрезки
Полигоны
Выпуклые оболочки
10
{Pi} – исходный набор из N точек;
W – стек точек.
Выбрать самую нижнюю-правую то
Отсортировать остальные точки
вместо угла удобнее проверять условие
Left(Pi,
P0, Pj).
Если несколько точек с одинаковыми
углами, оставить только самую дальнюю.
Push(P0);
Push(P1);
i := 2;
while
i < N do begin
PT1 := точка в верхушке стека;
PT2 := вторая сверху точка в
стеке;
if Left(P[i],
PT2, PT1) then begin
Push(P[i]);
i := i + 1;
end
else
Pop(PT1); {Выбрасываем точку}
end;
{В стеке остались точки выпуклой
оболочки}
Выпуклая оболочка множества то
метод Грэхема
T(n) = O(n·log(n))
P4
P3
P2
P1
P0
P5
P6
P7
P?
11
{Pi} – исходный набор из N точек;
W – стек точек.
Отсортировать все точки по
возрастанию x, а при равенстве x по
возрастанию y.
{Для простоты рассмотрим только точки
сверху (Left(Pi,
P0, Pn-1)
= True)}
Push(P0);
Push(P1);
i := 2;
while
i < N do begin
PT1 := точка в верхушке стека;
PT2 := вторая сверху точка в
стеке;
if Right(Pi,
PT2, PT1) then begin
Push(Pi);
i := i + 1;
end
else
Pop(PT1); {Выбрасываем точку}
end;
{В стеке точки верхней половины
выпуклой оболочки; нижняя половина
находится аналогично, затем они
сливаются}
Выпуклая оболочка множества то
метод Эндрю
T(n) = O(n·log(n))
P2
P5
P8
P10
P6
P4
P1
P0
P3
P7
P9
12
Мелкие советы