Научная литература
booksshare.net -> Добавить материал -> Математика -> Препарата Ф. -> "Вычислительная геометрия: Введение" -> 161

Вычислительная геометрия: Введение - Препарата Ф.

Препарата Ф., Шеймос М. Вычислительная геометрия: Введение. Под редакцией Ю. М. Банковского — М.: Мир, 1989. — 478 c.
ISBN 5-03-001041-6
Скачать (прямая ссылка): vichgeometr.pdf
Предыдущая << 1 .. 155 156 157 158 159 160 < 161 > 162 163 164 165 166 167 .. 180 >> Следующая


Пусть заданы два интервала: R'= {х[, х'2] и R" = [x", х'2'~\; условие R'fiR" ф 0 эквивалентно одному из следующих взя-

8.8. Пересечения прямоугольников

437

имно исключающих условии:

х\ < х'[ < хг2; (8.2)

*[' < х[ < х". (8.3)

Четыре возможных ситуации взаимного расположения концов интервалов, соответствующих условию R/(]R"?=0, фактически охватываются соотношениями (8.2) и (8.3), что может быть проверено непосредственным образом. Поэтому для проверки пересечения R' и R" достаточно проверить факт попадания или левого конца R' внутрь/?",или левого конца R" внутрь R'.

Указанное свойство одномерной задачи играет важнейную роль при решении следующей задачи:

Задача 0.8 (ОТЧЕТ О ПЕРЕСЕЧЕНИИ ПРЯМОУГОЛЬНИКОВ). Дан на бор из N изотетичных прямоугольников. Надо перечислить все их пересекающиеся пары.

Для решения этой задачи представляется естественным обращение к методу плоского заметания, где точками событий являются, как обычно, абсциссы вертикальных сторон прямоугольников. Статус заметающей исходных прямоугольников упрощения формулировок

Заметающая прямая I

Рис. 8.29. Ситуация, возникающая при достижении заметающей прямой левой стороны прямоугольника R. Показаны только активные прямоугольники.

прямой задается пересечениями с этой заметающей прямой; для назовем вновь прямоугольники, пересеченные заметающей прямой, активными (см. разд. 8.6). Предположим, что в процессе плоского заметания слева направо текущей точкой события стала левая сторона (вновь встреченного) прямоугольника R — [х\, х2] X [у\, у2] ¦ Очевидно, что абсцисса заметающей прямой Х\ (которая совпадает с левым концом х-интервала для R) принадлежит х-интервалам для каждого из активных прямоугольников; поэтому все, что необходимо сделать, состоит в определении того, для каких из активных прямоугольников выполнены условия или (8.2), или (8.3) на их «/-интервалах (рис. 8.29). Кажется, что необходим двукратный поиск: один раз для проверки условия (8.2), а второй для проверки условия (8.3). Двойственная природа этих

438

Гл. 8. Геометрия прямоугольников

двух проверок (одна для определения всех интервалов, содержащих некую точку; другая для определения всех точек, попавших в некий интервал) может навести на мысль об использовании двух разных структур данных и о разработке несколько более сложных алгоритмов [Bentley, Wood (1980); Six, Wood (1980)].

Превосходное решение было получено в результате введения [McCreight (1981); Edelsbrunner (1980)] новой структуры данных, названной Эдельсбруннером деревом интервалов. Хотя возможна и более совершенная динамическая версия интервального дерева, мы ограничимся простым статическим вариантом, пригодным для наших целей.

Если e(i)] обозначает у-интервал для прямоугольника /?('', то пусть (уи г/г, ..., у2ы) обозначает упорядоченную последовательность концов N штук «/-интервалов. (Статическое) дерево интервалов имеет скелетную структуру (именуемую первичной структурой), которая статически зависит от заданной последовательности точек (в нашем случае от последовательности (г/ь г/глг), хотя в ней можно хранить произвольное подмножество (активное подмножество) интервалов, чьи концы принадлежат множеству {уи у2, г/глт}. Тогда дерево интервалов Т на последовательности (уи «/2, • ¦ •, Угы) и множестве интервалов / s {[b[i), е(/)]: i = 1, N}, определяется следующим образом:

1. Корень w дерева Т имеет дискриминант 8 (ay) = (yN 4-+ r/vv—i) /2 и два указателя на (вторичные) списки 3?(w) и 5?(ау). Списки 2?(w) и 3l(w) содержат упорядоченные списки соответственно левых и правых концевых точек тех интервалов из /, которые содержат 8(w). (2? (w) и 91 (w) упорядочены по возрастанию и убыванию соответственно.)

2. Левым поддеревом для w является дерево интервалов на последовательности (г/ь ..., ум) и подмножестве интервалов Ig^I, ординаты правых концов которых не превосходят б (да). Аналогично определяется и правое поддерево для w.

3. Каждый первичный узел в Т считается или «активным», или «неактивным». Узел активен, если его вторичные списки непусты или если в обоих его поддеревьях есть активные узлы.

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

(1) Первичная структура Т является сбалансированным двоичным деревом, листья которого связаны с величинами ?/ь • • •, y2N, и прохождение по Т во внутреннем порядке дает упорядоченную последовательность (уь y2N).

(2) На вторичных списках 3?(v) и 91 (v) для нелистового первичного узла v должны быть определены операции вставки

8.8. Пересечения прямоугольников

439

и удаления элементов. Эти списки удобно реализовать как сбалансированные по высоте или весу деревья.

(3) Активные узлы можно однозначно связать в структуру, представляющую собой двоичное дерево д~, каждая дуга которого соответствует пути (или его части), исходящему из корня Т. Поэтому каждому первичному узлу v припишем два указателя: ЛУ (левый указатель) и ПУ (правый указатель), используемые для реализации дерева Т. Если узел v неактивен, то ЛУ[и] = Л и ПУ[а] = Л; однако если v активен, то ЛУ^]Ф ф Л только тогда, когда существуют активные узлы в левом
Предыдущая << 1 .. 155 156 157 158 159 160 < 161 > 162 163 164 165 166 167 .. 180 >> Следующая

Реклама

c1c0fc952cf0704ad12d6af2ad3bf47e03017fed

Есть, чем поделиться? Отправьте
материал
нам
Авторские права © 2009 BooksShare.
Все права защищены.
Rambler's Top100

c1c0fc952cf0704ad12d6af2ad3bf47e03017fed