Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Разработка эффективных алгоритмов.doc
Скачиваний:
219
Добавлен:
24.11.2019
Размер:
1.2 Mб
Скачать

6.4. Вопросы для самоконтроля

  1. Определите число операций сравнения при поиске в строке «ТАРАКАН К РЫБАКУ» подстроки «РЫБАК» для простого алгоритма; для алгоритма Бойера-Мура.

7. Вычислительная геометрия

7.1. Основные понятия

Любая точка Р на плоскости описывается парой вещественных чисел (координат) Р(х,у) (рис. 7.1).

В то же время любую точку плоскости можно считать вектором, начало которого находится в точке (0,0), а конец – в точке Р (рис.7.2).

Для любых двух векторов определены следующие операции:

сумма: = + qx=vx+wx; qy=vy+wy;

разность: = - qx=vx-wx; qy=vy-wy;

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

Скалярное произведение обращается в 0, в том и только в том случае, когда, по крайней мере, один из векторов является нулевым или когда векторы и – ортогональны.

Для скалярного произведения справедливы соотношения:

v*w=vx*wx+vy*wy=vcos()*wcos()+vsin()*wsin()=|v|*|w|*cos(-)

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

7.2. Векторное произведение векторов

Векторным произведением векторов v и w называется вектор q, такой, что длина равна |v|*|w|sin , а его направление перпендикулярно плоскости векторов и . Вектор =  направлен так, что из конца этого вектора кратчайший поворот от к виден происходящим против часовой стрелки.

Д лина этого вектора равна площади параллелограмма, построенного на перемножаемых векторах (рис.7.3).

Учитывая, что векторы и лежат в координатной плоскости (х,у), то есть координата z =0, получаем: =(vxwy-vywx) . Обратим внимание, что данное выражение является определителем матрицы

.

7.2.1. Ориентированная площадь треугольника

Н айдем площадь треугольника ОАВ (рис.7.4 а).

Очевидно, что его площадь равна половине площади параллелограмма ОАСВ, а площадь последнего равна модулю векторного произведения векторов ОА и ОВ. То есть SOACB=AxBy-AyBx. Отсюда SOAB=(AxBy-AyBx). Площадь же треугольника ОВА SOBA=(BxAy-ByAx) – имеет другой знак! То есть в зависимости от порядка обхода точек (по часовой или против часовой стрелки) получается положительная или отрицательная величина, так называемая ориентированная площадь треугольника.

Пусть даны 3 точки р1(х1,у1), р2(х2,у2) и р3(х3,у3), определяющие вершины треугольника (рис. 7.4 б). Определим площадь этого треугольника, используя векторное произведение.

Совместим начало координат с первой точкой. Векторное произведение в этом случае равно определителю следующей матрицы:

= (х2-х1)(у3-у1) – (у2-у1)(х3-х1)=х1(у2-у3)+у1(х3-х2)+х2у3-х3у2.

Последнее выражение равносильно раскрытию определителя по первой строке матрицы:

= х1(у2-у3)+у1(х3-х2)+х2у3-х3у2 .

Если поменять порядок обхода точек (не р1р2р3, а р1р3р2), то мы получаем матрицы, определители которых противоположны по значению! При обходе против часовой стрелки получается положительная величина, а при обходе по часовой стрелке – отрицательная. Это свойство ориентированной площади треугольника очень часто используется при решении различных геометрических задач.

Пример 7.1 Дан многоугольник, состоящий из N вершин. Определить, является ли он выпуклым.

Одним из возможных решений данной задачи является следующее. Все треугольники выпуклого многоугольника, образованные тройками соседних вершин в порядке их обхода, имеют одну и ту же ориентацию (рис. 7.5 а). Как только ориентация меняется, меняется и знак ориентированной площади треугольника (рис. 7.5 б). (Следует учесть тот факт, что нахождение тройки вершин на одной прямой не нарушает факта выпуклости).