Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Delphi_02_07 [2012].doc
Скачиваний:
3
Добавлен:
10.09.2019
Размер:
1.82 Mб
Скачать

Поворот последовательных отрезков

В процессе выполнения алгоритма GRAHAM_SCAN встает следующий вопрос: куда сворачивают два последовательных отрезка p0p1 и p1p2 в точке p1 - влево или вправо. Можно привести эквивалентную формулировку этого вопроса – определить знак угла  p0p1p2. Векторное произведение позволяет ответить на этот вопрос, не вычисляя величину угла. Как видно из рис. 3, производится проверка, находится ли направленный отрезок p0p2 по часовой стрелке или против часовой стрелки относительно направленного отрезка p0p1.

Рис. 3. Использование векторного произведения для определения направления поворота последовательности отрезков

Для этого вычисляется векторное произведение (p2p0) * (p1p0). Если эта величина отрицательная, то переход от направленного отрезка p0p1 к направленному отрезку p0p2 осуществляется против часовой стрелки, и в точке p1 образуется левый поворот. Положительное значение векторного произведения указывает на ориентацию по часовой стрелке и на правый поворот. Обе эти ситуации проиллюстрированы на рис. 3. В части а показан случай, соответствующий левому повороту, а в части б – случай, соответствующий правому повороту. Нулевое векторное произведение означает, что точки p0, p1 и p2 коллинеарны.

Задание

Написать программу поиска выпуклой оболочки с привлечением графических средств Delphi. На форме разместить компонент Image размером 400*400 пикселей. С помощью датчика псевдослучайных чисел сгенерировать не менее 100 точек и отобразить их на холсте (Canvas) компонента Image. Точки изображать в виде квадратиков (Rectangle) или окружностей (Ellipse) размером в 3 пикселя. Координаты точек как по оси X, так и по оси Y должны быть в диапазоне от 10 до 390. Найти выпуклую оболочку и изобразить ее в виде многоугольника, т. е. соединить точки, принадлежащие выпуклой оболочке, отрезками прямых линий (MoveTo, LineTo, Polygon, Polyline). Начальные сведения о графических возможностях Delphi приведены в файле [Графические возможности Delphi.doc].

5

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]