- •Синхронизация процессов и цепочек
- •Венгерская нотация, ссылки и ресурсы
- •Стандартные кисти, иконки, курсоры
- •Пример:
- •Введение в ресурсы
- •Курсоры, пиктограммы и растровые изображения
- •Работа с текстом
- •Работа с мышью
- •Ресурс панель диалога
- •Основные понятия машинной графики
- •Рассмотрим такие примитивы, как вершина, отрезок, воксель и модели, строящиеся на их основе, а также функциональные модели. Полигональные модели
- •Воксельные модели
- •Поверхности свободных форм (функциональные модели)
- •Проекции
- •Различают следующие проекции.
- •Алгоритм Коэна - Сазерленда отсечения прямоугольной областью
- •Метод дихотомии
- •Задача удаления невидимых линий и поверхностей
- •Удаление нелицевых граней многогранника. Алгоритм Робертса
- •Алгоритм Варнока
- •Алгоритм Вейлера-Азертона
- •Метод z-буфера
- •Методы приоритетов. Алгоритм художника.
- •Алгоритм плавающего горизонта
- •Алгоритмы построчного сканирования для криволинейных поверхностей
- •Библиотека OpenGl
- •Простейшая программа
- •Создание формы
- •Формат пикселя
- •Вершины и система координат
- •Треугольники
- •Многоугольники
- •Область рисования
- •Преобразование координат. Матрицы
- •Видовое преобразование. Масштабирование, поворот и перенос
- •Параметры вида. Перспективная проекция
- •Буфер глубины
- •Надстройки над OpenGl
- •Источник света
- •Свойства материала и модель освещения
- •Отсечение
- •Анализ алгоритмов. Модель вычислений
- •Асимптотический анализ алгоритмов
- •Анализ рекурсивных алгоритмов
- •Метод заметающей прямой
- •Метод локусов. Задачи геометрического поиска
- •Задачи регионального поиска. Многомерное двоичное дерево
- •Задачи локализации точки. Метод луча
- •Локализация точки на планарном подразбиении. Метод полос
- •Некоторые основные понятия вычислительной геометрии
- •Построение звездчатого полигона
- •Предварительная разработка алгоритма построения выпуклой оболочки на плоскости
- •Метод обода Грэхема
- •Триангуляция Делоне
- •Диаграмма Вороного
- •Построение диаграммы Вороного
- •Модель osi
- •Уровни модели tcp/ip
Метод заметающей прямой
Задача: на плоскости заданы N отрезков координатами своих вершин. Найти все пары взаимопересекающихся отрезков.
При наиболее грубом
подходе проверяются все возможные пары
отрезков. Это занимает время (N2),
поскольку имеется
пар,
а каждая проверка выполняется за
фиксированное время. Рассмотрим алгоритм
позволяющий сократить время поиска до
O(logN).
Сделаем несколько допущений.
ни один из отрезков прямой линии не должен быть вертикальным (такой ситуации можно избежать путем некоторого поворота плоскости);
любые два отрезка прямой линии могут пересекаться только в одной точке;
никакие три отрезка прямой линии не пересекаются в одной и той же точке.
Проведем через произвольную абсциссу (х) вертикальную прямую L (без ограничений общности можно считать, сто слева и справа от L есть решения нашей задачи и общее решение есть сумма решений для каждой полуплоскости).
Проведем прямую L через точку являющуюся концом отрезка, имеющую наименьшую абсциссу и поставим в соответствие L список отрезков, пересекаемых прямой L в порядке возрастания ординат точек пересечения. Аналогичные действия проведем для всех концов заданных отрезков. Тем самым мы разобьем плоскость на 2N+1 полосу, причем решение задачи в каждой полосе независимо.
В силу независимости решений в полосах сосредоточим внимание на поиске решения в одной полосе. На левой и правой границе полосы имеем два списка, сформированных ранее и состоящих из “имен” отрезков.
Изменение порядка отрезков в списке при переходе от левой полосы к правой говорит о наличии пересечения данных отрезков внутри полосы. Объединив решения для каждой полосы получим решение задачи.
Структуру, поставленную в соответствие прямой L называют статусом заметающей прямой. Точки, в которых статус формируется или модифицируется называются точками останова заметающей прямой.
Идея метода заметающей прямой является одной из основных в вычислительной геометрии, наряду с дихотомией, методом “разделяй и властвуй” и т.д.
Метод локусов. Задачи геометрического поиска
Пусть имеется набор геометрических данных и требуется узнать обладают ли они некоторым свойством (например, выпуклостью). Если этот вопрос возникает единожды, то запрос такого типа называют уникальным. Но если запросы и их обработка повторяются многократно, то такой запрос называется массовым.
Задача. На плоскости даны N точек. Сколько из них лежит внутри заданного прямоугольника, стороны которого параллельны координатным осям? То есть сколько точек (x,y) удовлетворяют неравенствам a<=x<=b, c<=y<=d для заданных a, b, c, d?
Уникальный запрос в этом случае будет обработан за линейное время. Необходимо проверить каждую точку из N, удовлетворяет ли она неравенствам. На память потребуется 2N. Для массового запроса необходимо использовать метод локусов: запросу ставится в соответствие точка в удобном для поиска пространстве, а это пространство разбивается на области (локусы), в пределах которых ответ не изменяется.
Будем говорить, что точка V доминирует над W, тогда и только тогда, когда для всех индексов i верно условие Vi>=Wi. На плоскости точка V доминирует над W тогда и только тогда, когда W лежит в левом нижнем квадранте, определяемом V. Итак, Q(p) – число точек, над которыми доминирует p. Число точек N(p1p2p3p4) в прямоугольнике p1p2p3p4 определяется следующим образом:
N(p1p2p3p4)=Q(p1)-Q(p2)-Q(p4)+Q(p3) см. рис.1.
Итак, задача регионального поиска сведена к задаче обработки запросов о доминировании для четырех точек.
Для всех точек р в любом из таких прямоугольников Q(р) константа. Это означает, что доминантный поиск это ответ на вопрос: в какой ячейке лежит заданная точка? После упорядочивания исходных точек по обеим координатам необходимо выполнить два двоичных поиска (для каждой оси), чтобы найти ячейку, содержащую точку. Время запроса равно O(logN). Память O(N2).
Вообще, можно говорить о двух главных моделях для задач геометрического поиска:
Задачи локализации, когда файл представляет собой разбиение геометрического пространства на области, а запрос является точкой. Локализация состоит в определении области, содержащей запрошенную точку.
Задачи регионального поиска, когда файл содержит набор точек пространства, а запрос есть некая стандартная геометрическая фигура (в 3D шар или брус), произвольно перемещаемая в этом пространстве. Региональный поиск состоит в извлечении или подсчете числа всех точек внутри запросного региона.
