Что такое findslide.org?

FindSlide.org - это сайт презентаций, докладов, шаблонов в формате PowerPoint.


Для правообладателей

Обратная связь

Email: Нажмите что бы посмотреть 

Яндекс.Метрика

Презентация на тему Вычислительная геометрия

Содержание

Базовые процедуры
Вычислительная геометрия Базовые процедуры Операции для векторов Сумма: 	  q = v + w	qx = Полярная и декартова системы координат Связь координат в полярной и декартовой системах Свойства векторов 		Скалярное произведение ненулевых векторов равно нулю тогда и только тогда, Прямая линия Прямая линия на плоскости, проходящая через две точки (vx,vy), (wx,wy), Координаты точек отрезка x = vx+(wx-vx)*t, 	y = yx+(wy-vy)*t	При 0 Взаимное расположение отрезков 		v1 = p3p4 x p3p1,	 v2 = p3p4 x Задача 1 Даны 3 точки A, B и C. Определить, лежат ли Задача 2 ((B.x - A.x) * (C.y - A.y) - (C.x - Задача 3 Даны 4 точки A, B, C и D. Определить, пересекаются Задача 4-1 Лежит ли данная точка A внутри данного многоугольника B1B2...Bn? Считаем Задача 4-2 Алгоритм Выбираем прямую. Находим, с какими сторонами она пересекается и Задача 4-3 Точка A меняет свое положение, а многоугольник остается неизменным. Порядок Задача 4-4 Ответ на вопрос задачиИспользуя полученные в процессе предварительной обработки сведения, Задача 5 Является ли данный многоугольник B1B2...Bn простым? Решение Эту задачу можно Задача 6-1 Можно ли мы из данного набора N точек выбрать его Задача 6-2 Алгоритм Грэхема1. Инициализация набора из N точек с декартовыми координатами Задача 6-3 Алгоритм Грэхема3. Переопределение координат всех точек исходного набора в полярной Задача 7 Даны 3 точки A, B и C, лежащие на одной Задача 8 Даны 4 точки A, B, C и D. Определить, в Задача 9-1 Дано конечное множество отрезков на плоскости. Координаты концов могут быть Задача 9-2 ОСНОВНАЯ ЗАДАЧАПересечение прямолинейных отрезков на плоскостиПОДЗАДАЧА (ПППО)Проверка Пересечения Прямолинейных ОтрезковДано: Задача 9-3 Преобразование задачЗадача А преобразуется в задачу В за время О(Т(n)), Задача 9-4 Проверка пересечения пары отрезковГрубый тестОпределение факта пересечения ограничивающих прямоугольников каждого Задача 9-5 Из пересечения отрезков следует пересечение ограничивающих прямоугольников.Из пересечения прямоугольников не Задача 9-6 Сравнение чисел с плавающей запятойДаны A и B -- числа Задача 9-7 Проверка условия существования точки пересечения(((x1=x)and(x3=x))or((y1=y)and(y3=y))) Проверка параллельности отрезков при помощи Задача 9-8 Идея плоского заметанияВозьмем вертикальную прямую L, которая разбивает плоскость на Задача 9-9 Непрерывное заметание плоскости является метафорой.Алгоритм, основанный на идее заметающей прямой, Задача 9-10 Отношение порядка на отрезкахУпрощающие предположенияСреди отрезков нет вертикальных.Никакие три отрезка
Слайды презентации

Слайд 2 Базовые процедуры

Базовые процедуры

Слайд 3 Операции для векторов
Сумма: q =

Операции для векторов Сумма: 	 q = v + w	qx =

v + w qx = vx + wx, qy =

vy + wy

Обозначим координаты вектора v=(vx,vy), w=(wx,wy), q=(qx,qy).

Каждую точку плоскости можно считать вектором, начало которого находится в точке (0,0).

Векторное произведение: v x w = (vx * wy - vy * wx)z

Скалярное произведение: v * w = vx * wx+ vy * wy

Умножение на число k: q = k * v qx = k * vx, qy = k * vy

Разность: q = v - w qx = vx - wx, qy = vy - wy


Слайд 4 Полярная и декартова системы координат

Связь координат в

Полярная и декартова системы координат Связь координат в полярной и декартовой

полярной и декартовой системах координат
vx = v*cos(α), vy = v*sin(α)
v

= sqrt(vx2 + vy2 ), tan(α) = vy/vx

Векторное произведение векторов (v,α) и (w,β)
v x w = (vx * wy - vy * wx)z = = (v*cos(α)*w*sin(β) - v*sin(α)*w*cos(β))z = (v*w*sin(β-α))z

Скалярное произведение векторов (v,α) и (w,β)
v*w = vx*wx+vy*wy = = v*cos(α)*w*cos(β) + v*sin(α)*w*sin(β) = v*w*cos(α-β)


α

v

vx

vy

x

y


Слайд 5 Свойства векторов
Скалярное произведение ненулевых векторов равно нулю

Свойства векторов 		Скалярное произведение ненулевых векторов равно нулю тогда и только

тогда и только тогда, когда векторы перпендикулярны.
1
При общей начальной

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

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

Векторное произведение ненулевых векторов равно нулю тогда и только тогда, когда векторы параллельны.

2

3

4


Слайд 6 Прямая линия
Прямая линия на плоскости, проходящая через

Прямая линия Прямая линия на плоскости, проходящая через две точки (vx,vy),

две точки
(vx,vy), (wx,wy), определяется линейным уравнением от двух

переменных (wx-vx)*(y-vy) = (wy-vy)*(x-vx).

После преобразований и обозначений: A*x+B*y+C = 0.

Точка пересечения прямых, заданных уравнениями: A1*x+B1*y+C1 = 0 и A2*x+B2*y+C2 = 0

X= -(C1*B2-C2*B1)/(A1*B2-A2*B1)
Y= (A2*C1-A1*C2)/(A1*B2-A2*B1)



Слайд 7 Координаты точек отрезка
x = vx+(wx-vx)*t, y =

Координаты точек отрезка x = vx+(wx-vx)*t, 	y = yx+(wy-vy)*t	При 0

yx+(wy-vy)*t
При 0

t>1 точка (x,y) лежит вне отрезка на прямой линии, продолжающей отрезок.

Пример. Даны два отрезка, заданные точками p1=(x1,y1) и p2=(x2,y2), p3=(x3,y3) и p4=(x4,y4).
Определить взаимное расположение отрезков на плоскости.


p1=(x1,y1)

p2=(x2,y2)

p3=(x3,y3)

p4=(x4,y4)

p=(x,y)



Слайд 8 Взаимное расположение отрезков
v1 = p3p4 x p3p1,

Взаимное расположение отрезков 		v1 = p3p4 x p3p1,	 v2 = p3p4

v2 = p3p4 x p3p2

v3 = p1p2 x p1p3,

v4 = p1p2 x p1p4

v1v2<0 и v3v4<0

v1v2>0 или v3v4>0

v1v2<=0, v3=0, v4<>0

v1v2<=0, v4=0, v3<>0

v3v4<=0, v1 =0, v2<>0

v3v4<=0, v2 =0, v1<>0

v1 =0, v2 =0, v3 =0, v4 =0

Отрезки пересекаются

Отрезки не пересекаются

Точка р3 лежит на отрезке р1р2

Точка р4 лежит на отрезке р1р2

Точка р1 лежит на отрезке р3р4

Точка р2 лежит на отрезке р3р4

Отрезки р1р2 и р3р4 лежат на одной прямой.
Нужна проверка на их перекрытие.









Слайд 9
Задача 1
Даны 3 точки A, B и

Задача 1 Даны 3 точки A, B и C. Определить, лежат

C. Определить, лежат ли они на одной прямой.
Решение
Нужно

выяснить, параллельны ли векторы AB и AC. Координаты этих векторов – разности координат точек.

Для того чтобы векторы с координатами (x1, y1) и (x2, y2) были параллельны, нужно, чтобы существовало такое число a, что
x2 = a * x1 и y2 = a * y1.

Требуется проверить равенство
x2 / x1 = y2 / y1.

Так как x1 или y1 могут оказаться равными 0, то проверяем равенство
x1 * y2 = x2 * y1.


Слайд 10 Задача 2

((B.x - A.x) * (C.y

Задача 2 ((B.x - A.x) * (C.y - A.y) - (C.x

- A.y) - (C.x - A.x) * (B.y -

A.y) < 0) - по часовой



Даны 3 точки A, B и C, не лежащие на одной прямой.
Определить, является ли обход A→B→C обходом по часовой стрелке или против часовой стрелки.





А

В

С







А

В

С




Слайд 11 Задача 3
Даны 4 точки A, B, C

Задача 3 Даны 4 точки A, B, C и D. Определить,

и D. Определить, пересекаются ли отрезки AC и BD.


Даны 4 точки A, B, C и D. Определить, является ли четырехугольник ABCD выпуклым.

Решение
Отрезки AC и BD пересекаются тогда и только тогда, когда четырехугольник ABCD выпуклый.

Для того, чтобы четырехугольник ABCD был выпуклым, необходимо и достаточно, чтобы все 4 обхода A→B→C, B→C→D, C→D→A, D→A→B были обходами в одну сторону: либо по часовой стрелке, либо против.


Слайд 12 Задача 4-1
Лежит ли данная точка A внутри

Задача 4-1 Лежит ли данная точка A внутри данного многоугольника B1B2...Bn?

данного многоугольника B1B2...Bn?
Считаем многоугольник простым. Это значит, что

его стороны не имеют общих точек, кроме вершин, причем в каждой вершине встречаются ровно 2 стороны.

Решение
Если провести через точку A прямую, параллельную оси Х, то она пересечет стороны многоугольника в четном числе точек. При этом на прямой будут чередоваться интервалы, находящиеся вне многоугольника и внутри него.

Если по обе стороны от точки A на прямой окажется четное число точек пересечения со сторонами, то точка лежит вне многоугольника, а если нечетное – то внутри.



А


Слайд 13 Задача 4-2
Алгоритм
Выбираем прямую.
Находим, с какими

Задача 4-2 Алгоритм Выбираем прямую. Находим, с какими сторонами она пересекается

сторонами она пересекается и в каких точках.
Считаем количество

таких точек с одной стороны от A.

Детали
1. Прямая может проходить через вершину многоугольника 2 разными способами – пересекая границу многоугольника или касаясь его границы.
2. Сторона прямоугольника может быть горизонтальной и лежать на прямой.



А



А


Слайд 14 Задача 4-3
Точка A меняет свое положение, а

Задача 4-3 Точка A меняет свое положение, а многоугольник остается неизменным.

многоугольник остается неизменным.
Порядок следования вершин многоугольника неизвестен.
Предварительная

обработка
Данные, связанные с многоугольником, записываются в более удобном виде.

Алгоритм
1. Возьмем точку C внутри многоугольника.

2. Для всех лучей с началом в точке C, проходящих через вершины многоугольника, посчитаем углы, которые они образуют с вертикальным лучом, начинающимся в точке C.
Углы считаем “против часовой стрелки”, так что они могут иметь значения от 0 до 360 градусов.

3. Теперь каждой вершине многоугольника соответствует число. Занумеруем вершины в порядке возрастания этих чисел: B1B2... BN.




На это действие (сортировку) требуется время O(N logN).




А


С


Слайд 15 Задача 4-4
Ответ на вопрос задачи
Используя полученные в

Задача 4-4 Ответ на вопрос задачиИспользуя полученные в процессе предварительной обработки

процессе предварительной обработки сведения, определяем для заданной точки, лежит

ли она внутри многоугольника.

Алгоритм
Для заданной точки A проведем луч CA и посчитаем для него угол с вертикальным лучом.

Найдем, между какими двумя лучами CBi и CBi+1 проходит луч CA. Это можно сделать за время O(log N) – используя бинарный поиск, поскольку лучи расставлены в порядке возрастания (или убывания) угла.

Выясним, лежит ли точка A внутри треугольника CBiBi+1.




А


С

Bi

Bi+1


Слайд 16 Задача 5
Является ли данный многоугольник B1B2...Bn простым?

Задача 5 Является ли данный многоугольник B1B2...Bn простым? Решение Эту задачу


Решение
Эту задачу можно решить за время O(N2), просто

перебрав все возможные пары отрезков и проверив, не пересекаются ли они.

Слайд 17 Задача 6-1
Можно ли мы из данного набора

Задача 6-1 Можно ли мы из данного набора N точек выбрать

N точек выбрать его подмножество N- так, чтобы многоугольник,

построенный на этих точках, был выпуклым?

Решение
Будем выбирать подмножество точек-вершин Ncover так, чтобы получившийся многоугольник содержал внутри все остальные точкиN\Ncover.

У подмножества Ncover есть специальное название – выпуклая оболочка.

Алгоритм Грэхема
Проверять тройки последовательных точек в порядке обхода против часовой стрелки.
Если угол q1q2q3 больше или равен π, то точки образуют «правый поворот», иначе «левый поворот».
Исключить точки, образующие «правый поворот».












q1

q2

q3

А



Слайд 18 Задача 6-2
Алгоритм Грэхема
1. Инициализация набора из N

Задача 6-2 Алгоритм Грэхема1. Инициализация набора из N точек с декартовыми

точек с декартовыми координатами Xi и Yi (i=1:N).

2.

Выбор внутренней точки А будущего многоугольника.
Способ 1. Выбрать тройку точек исходного набора, образующих невырожденный треугольник; тогда любая его внутренняя точка нас устроит (по существу, берутся “первые попавшиеся” две точки, а третья отбирается при последовательном выборе, т.е. с трудоемкостью O(N)).
Способ 2. Найти средние арифметические значений координат Xi и Yi всех точек и приписать их, соответственно, новой (внутренней!) точке – A(X,Y); вычисления имеют ту же трудоемкость – O(N).

Сортировка из N элементов может быть выполнена за время O(N*logN).
Обход может быть выполнен за время, пропорциональное N.

Выпуклую оболочку можно построить за время, пропорциональное N*logN.


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



Слайд 19 Задача 6-3
Алгоритм Грэхема
3. Переопределение координат всех точек

Задача 6-3 Алгоритм Грэхема3. Переопределение координат всех точек исходного набора в

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

координат точку A.
Нулевой угол отсчета можно связать с любым лучом, например, Aq1.

5. Отсев точек, которые не войдут в выпуклую оболочку. Для этого осуществим последовательный перебор троек “соседних” точек упорядоченного набора N1, отбрасывая лишние, до получения искомого набора Ncover.

Критерий отброса: для каждой очередной “тройки” проверяем значение угла между ними pi-1pipi+1. Если угол не меньше 180°, то точка pi исключается из набора N1 и новая тройка “начинается” с той же точки pi-1. В противном случае индекс i увеличивается на 1. Перебор завершается, когда обход “по кругу” не приводит к отсеву точек: Ncover сформирована.

4. Сортировка по неубыванию точек исходного набора. В качестве ключа используется значение полярного угла. При равенстве углов “отсеивать” точки с меньшим расстоянием от начала координат. В результате получим набор N1∈N.


Слайд 20 Задача 7
Даны 3 точки A, B и

Задача 7 Даны 3 точки A, B и C, лежащие на

C, лежащие на одной прямой. Определить, какая из них

лежит между двумя другими.

Решение
Будем решать задачу не для самих точек, а для их проекций на ось X. Для этого нужно выяснить, какое из чисел A.x, B.x и C.x лежит между двумя другими.

Следует иметь в виду, что эти числа могут совпасть (если точки лежат на прямой, перпендикулярной оси X). Тогда придется рассмотреть проекцию на другую ось.


Слайд 21 Задача 8
Даны 4 точки A, B, C

Задача 8 Даны 4 точки A, B, C и D. Определить,

и D. Определить, в какой точке пересекаются прямые AC

и BD.

Решение
Нужно найти точку, лежащую одновременно на двух прямых.

Условие принадлежности точки P прямой AC :
(C.x-A.x)*(P.y-A.y)-(P.x-A.x)*(C.y-A.y)=0.

Условие принадлежности точки Р прямой BD :
(D.x-B.x)*(P.y-B.y)-(P.x-B.x)*(D.y-B.y)=0.

Решение системы этих уравнений:
P.x=((C.x-A.x)*(D.x*B.y-B.x*D.y)+(D.x-B.x)*
*(C.x*A.y-A.x*C.y))/((C.x-A.x)*(B.y-D.y)-(C.y-A.y)* (B.x-D.x));

P.y=((C.y-A.y)*(D.y*B.x-B.y*D.x)+(D.y-B.y)*
*(C.y*A.x-A.y*C.x))/((C.y-A.y)*(B.x-D.x)-(C.x-A.x)* (B.y-D.y))

Знаменатели у обеих дробей одинаковы, они равны 0, если исходные прямые параллельны или совпадают.


Слайд 22 Задача 9-1
Дано конечное множество отрезков на плоскости.

Задача 9-1 Дано конечное множество отрезков на плоскости. Координаты концов могут

Координаты концов могут быть как целыми числами, так и

дробными. Требуется найти все точки пересечения.

Пояснение
Используется алгоритм, основанный на заметании плоскости вертикальной прямой.

Его временная сложность O((N+K)log(N)), где N - кол-во отрезков, K - кол-во точек пересечения.

Алгоритм реализован на базе двоичного дерева отрезков, упорядоченных по значению ординат в конкретной абсциссе.

Замечание
Погрешность вычисления у-координаты отрезка в заданной абсциссе х может быть связана с тем, что отрезок близок к вертикальному (угол между вертикалью и отрезком менее 5 - 10 градусов). Это может привести к тому, что процедура поиска уходит не в ту ветку дерева.

Ошибка связана с точностью представления вещественных чисел в компьютере.


Слайд 23
Задача 9-2
ОСНОВНАЯ ЗАДАЧА
Пересечение прямолинейных отрезков на плоскости
ПОДЗАДАЧА

Задача 9-2 ОСНОВНАЯ ЗАДАЧАПересечение прямолинейных отрезков на плоскостиПОДЗАДАЧА (ПППО)Проверка Пересечения Прямолинейных

(ПППО)
Проверка Пересечения Прямолинейных Отрезков

Дано: n прямолинейных отрезков на плоскости.
Определить

факт пересечения хотя бы двух из них.

ПОДЗАДАЧА (ВПО)
Все Пересечения Отрезков

Дано: n прямолинейных отрезков на плоскости.
Найти все попарные пересечения отрезков.

ПОДЗАДАЧА (ВПО-П)
Задача ВПО в форме подсчета

Ответ: число попарных пересечений.

ПОДЗАДАЧА (ВПО-О)
Задача ВПО в форме отчета

Ответ: перечень всех пар пересекающихся отрезков.

ПОДЗАДАЧА (ППМ)
Проверка Пересечения Многоугольников

Дано: два простых многоугольника с вершинами.
Определить, пересекаются ли они.

ПОДЗАДАЧА (ТПМ)
Тест Простоты Многоугольника

Дано: многоугольник с вершинами.
Определить, является ли он простым.


Слайд 24
Задача 9-3
Преобразование задач
Задача А преобразуется в задачу

Задача 9-3 Преобразование задачЗадача А преобразуется в задачу В за время

В за время О(Т(n)), если задачу А можно решить

следующим образом:
1. Из исходных данных задачи А получить исходные данные к задаче В за время О(Т(n)).
2. Решить задачу В.
3. Из результата решения задачи В получить результат решения задачи А за время О(Т(n)).


ППМ ПППО


n


ТПМ ПППО

n


ПППО ВПО-П ВПО-О

1

n


Слайд 25
Задача 9-4
Проверка пересечения пары отрезков
Грубый тест
Определение факта

Задача 9-4 Проверка пересечения пары отрезковГрубый тестОпределение факта пересечения ограничивающих прямоугольников

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

координатным осям, пересекаются тогда и только тогда, когда пересекаются их проекции на оси координат.

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




Слайд 26
Задача 9-5









Из пересечения отрезков следует пересечение ограничивающих

Задача 9-5 Из пересечения отрезков следует пересечение ограничивающих прямоугольников.Из пересечения прямоугольников

прямоугольников.

Из пересечения прямоугольников не следует пересечение отрезков.

Из непересечения прямоугольников

следует непересечение отрезков.



Слайд 27 Задача 9-6
Сравнение чисел с плавающей запятой
Даны A

Задача 9-6 Сравнение чисел с плавающей запятойДаны A и B --

и B -- числа с плавающей запятой. Для сравнения этих

чисел вместо A = B нужно писать (B - k) < A < (B + k), где k абсолютная погрешность вычислений числа B .


Нахождение точки пересечения отрезков
х1, у1 и х2,у2 -- координаты вершин первого отрезка. х3, у3 и х4,у4 -- координаты вершин второго отрезка.
Для нахождения пересечения составляем уравнения:
(x-x1)/(x2-x1) = (y-y1)/(y2-y1) (x-x3)/(x4-x3) = (y-y3)/(y4-y3)
Эти уравнения определяют прямую, проходящую через две точки.
Из уравнений находим х и у по следующим формулам:
x:=((x1*y2-x2*y1)*(x4-x3)-(x3*y4-x4*y3)*(x2-x1))/((y1-y2)*(x4-x3)-(y3-y4)*(x2-x1)) y:=((y3-y4)*x-(x3*y4-x4*y3))/(x4-x3)


Слайд 28 Задача 9-7
Проверка условия существования точки пересечения
(((x1=x)and(x3=x))or((y1=y)and(y3=y)))

Задача 9-7 Проверка условия существования точки пересечения(((x1=x)and(x3=x))or((y1=y)and(y3=y))) Проверка параллельности отрезков при

Проверка параллельности отрезков при помощи угловых коэффициентов
k1:=(x2-x1)/(y2-y1) k2:=(x4-x3)/(y4-y3)
где k1 и

k2 – тангенсы угла наклона отрезков к положительному направлению оси ОХ.

Если k1=k2, то отрезки параллельны, а значит, не имеют точек пересечения.

Слайд 29
Задача 9-8
Идея плоского заметания
Возьмем вертикальную прямую L,

Задача 9-8 Идея плоского заметанияВозьмем вертикальную прямую L, которая разбивает плоскость

которая разбивает плоскость на правую и левую полуплоскости.

L

q
x1
x2
x3
x4
xp
x5
x6
xq
x7
x8
x10
x9


Пусть каждая

из полуплоскостей содержит концы отрезков.

Решение задачи может быть получено объединением решений для каждой полуплоскости.

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


Искомое пересечение может произойти только между отрезками, чьи пересечения с некоторой вертикалью смежны.





Слайд 30
Задача 9-9
Непрерывное заметание плоскости является метафорой.
Алгоритм, основанный

Задача 9-9 Непрерывное заметание плоскости является метафорой.Алгоритм, основанный на идее заметающей

на идее заметающей прямой, обрабатывает конечное множество «скачков» прямой

по границам вертикальных полос.

Точки событий — точки, по которым «скачет» заметающая прямая.

Структуры данных, используемые в методе заметания

Список точек событий — последовательность абсцисс, упорядоченных слева направо и определяемых позициями «остановок» заметающей прямой.

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


  • Имя файла: vychislitelnaya-geometriya.pptx
  • Количество просмотров: 139
  • Количество скачиваний: 0