Вычислительная геометрия
Лекция, 02 Октября 2011, автор: пользователь скрыл имя
Краткое описание
Векторы и операции над ними
Оглавление
Векторы
Прямые
Отрезки
Полигоны
Выпуклые оболочки
Файлы: 1 файл
Вычислительная геометрия.ppt
— 304.50 Кб (Скачать)План лекции:
автор: С.Н. Дроздов
Вычислительная геометрия
- Векторы
- Прямые
- Отрезки
- Полигоны
- Выпуклые оболочки
2
Векторы и операции над ними
- Векторы:
r = (r.x, r.y);
r.x = x1 – x0, r.y = y1 – y0;
q = (q.x, q.y);
q.x
= x2 – x0, q.y = y2 – y0;
- Скалярное произведение:
r·q = r.x·q.x + r.y·q.y ;
Длина вектора: |r| = Sqrt(r·r);
Вид угла между векторами:
r·q > 0 – острый;
r·q = 0 – прямой;
r·q < 0 – тупой.
- Векторное произведение:
rq = (xryq – xqyr)z;
(z – единичный вектор оси Z).
Площадь треугольника со сторонами r и q: S = ½ |rq|.
Знак векторного
произведения указывает
- Угол между векторами:
sin() = |rq| / (|r|·|q|) – со знаком!
cos() = |r·q| / (|r|·|q|)
3
Прямые
- Прямая определяется
двумя точками:
P = (x1, y1), Q = (x2, y2). - Уравнение прямой:
dx·(y – y1) = dy·(x – x1),
где dx
= x2 – x1, dy = y2 – y1
или Ax + By –
C = 0
где A = dy, B = –
dx, C = dy·x1 –
dx·y1
- Удобно использовать нормальный вектор n – вектор единичной длины, перпендикулярный к прямой.
n = (–dy / dxy, dx / dxy)
где dxy = sqrt(dx2 + dy2)
- Тогда уравнение прямой:
R · n = w
где
R = (x, y) – радиус-вектор текущей точки,
w = (x2·y1 – x1·y2).
dxy = sqrt(dx2
+ dy2)
P
(x1, y1)
Q
(x2, y2)
dx
dy
n
dxy
4
Прямые (продолжение)
- Еще одна
удобная форма – параметрическо
е задание прямой :
x = x1 + dx·t
y = y1 + dy·t
- Расстояние от точки до прямой:
d = |R · n – w|
или
d = |dx·(y0 – y1) - dy·(x0 – x1)|
- Положение точки относительно прямой: если задано направление прямой от P к Q, то можно ввести предикат, означающий, что точка R лежит слева от прямой:
Left(R, P, Q) = (R · n > w)
или
dx·(y0 – y1) - dy·(x0 – x1) > 0
Аналогично
Right(R, P, Q) = (R · n < w)
или
dx·(y0
– y1) - dy·(x0 – x1) < 0
P
(x1, y1)
Q
(x2, y2)
dx
dy
n
d
d
Left
Right
R (x0, y0)
5
Взаимное расположение прямых
- A1x +
B1y – C1 = 0
A2x + B2y – C2 = 0 - Две прямые на плоскости могут:
- пересекаться;
- быть параллельны;
- совпадать.
- Условие пересечения:
A1B2 – A2B1 0
- Координаты пересечения равны:
x = (A1C2 – C1A2) / (A1B2 – A2B1)
y = (C1B2 – B1C2) / (A1B2 – A2B1)
- Уравнение
перпендикуляра к прямой
A1x + B1x – C1 = 0 из точки
R (x0, y0):
B1x –
A1y + (A1y0 – B1x0) = 0
P
(x1, y1)
Q
(x2, y2)
dx
dy
n
R (x0, y0)
6
Отрезки
- Отрезок определяется уравнением прямой и условием:
min(x1, x2) x max(x1, x2)
- а для вертикальной прямой
min(y1, y2) y max(y1, y2)
- В параметрической форме проще:
0 t 1
- Для определения расстояния от точки до отрезка надо опустить перпендикуляр из этой точки на прямую и проверить, попадает ли проекция точки на отрезок. Соответственно, расстояние до отрезка равно либо расстоянию до прямой, либо расстоянию до ближайшего конца отрезка.
dxy = sqrt(dx2
+ dy2)
P
(x1, y1)
Q
(x2, y2)
dx
dy
dxy
R1
R2
7
Полигоны (многоугольники)
- Площадь полигона:
- выбрать произвольную точку (например, начало координат) и провести из нее векторы во все вершины;
- суммировать площади всех n треугольников, образованных двумя векторами и стороной, с учетом знака векторного произведения.
Это правильно работает и в случае невыпуклого полигона.
В
примере: знаки площади
двух заштрихованных треугольников противоположные.
- Проверка выпуклости полигона:
- при обходе границы полигона знак векторного произведения соседних сторон должен быть одним и тем же.
- В примере: знаки q1 q2 и q1 q2 противоположные.
q1
q2
q3
8
Полигоны (продолжение)
- Направление обхода границы:
сумма углов поворота при обходе границы может быть равна:
2 - внутренняя область полигона слева от контура обхода;
- 2
- внутренняя область полигона справа
от контура обхода.
- Принадлежность точки выпуклому полигону:
- при обходе границы полигона точка должна быть либо всегда слева, либо всегда справа.
9