Скачиваний:
25
Добавлен:
01.05.2014
Размер:
2.95 Mб
Скачать

Пример Описание

CHP: 5 Количество точек в выпуклой оболочки.

P:10 Количество точек в текущем документе.

1024x768 Размер рабочей области.

x1.0 Текущий масштаб.

X:100 Текущее положение курсора мыши по координате X.

Y:200 Текущее положение курсора мыши по координате Y.

#46Создать новое окно

Этот пункт меню создает новое окно с данными текущего документа.

#47Расположить каскадом

Используйте этот пункт меню, чтобы расположить окна в ряд по диагонали с наложением друг на друга.

#48Расположить черепицей

Используйте этот пункт меню, чтобы расположить окна равномерно по всей области приложения.

#49Упорядочить пиктограммы

Используйте этот пункт меню, чтобы упорядочить скрытые окна внизу главного окна приложения.

#50Выбрать окно

Вы можете выбрать нужный документ из списка.

#51О программе

Информация о программе.

#52Редактирование документа

Чтобы добавить новые точки используйте левую кнопку мыши. Минимальное расстояние между точками - 5.

Чтобы показать выпуклую оболочку используйте клавишу “пробел”.

В пошаговом режиме рисуются следующие элементы:

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

  1. Красная линия – линия L связывает точки pmin и pmax (точки упорядочены слева направо и снизу вверх).

  1. Красные точки – точки (принадлежащие множеству S’ или S’’ в зависимости от того лежат они выше или ниже L) для которых будет строиться (верхняя или нижняя) оболочка.

  1. Фиолетовая линия – медиана Ld.

  1. Зеленая линия – линия связывает произвольно образованные пары точек (pi, qi, где piSl, qiSr).

  1. Черная пунктирная линия – опорная прямая.

  1. Синии точки – точки оставлены на данном шаге алгоритмя.

  1. Голубые точки – точки, отброшенные на данном шаге алгоритмя.

  1. Черная линия – ребра, которые в дальнейшем образуют выпуклую оболочку.

  1. Желтая линия – верхняя или нижняя оболочка.

  1. Вещественные числа у линии – наклон сегмента.

#53Помощь отсутствует

По данному разделу помощь отсутствует.

#54 Помощь отсутствует

Отсутствует помощь по данному диалоговому окну.

#55Добавить

Воспользуйтесь этим диалоговым окном, чтобы задать точку по координатам.

{bmc DlgAdd.bmp}

#56Импорт точек

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

<КОЛИЧЕСТВО ТОЧЕК>

<X1> <Y1>

<X2> <Y2>

<XN> <YN>

Пример:

3

1 1

10 15

100 23

#57Экспорт точек

С помощью этой процедуры вы можете сохранить точки из текущего документа в текстовом файле. Текстовый файл должен иметь следующий формат:

<КОЛИЧЕСТВО ТОЧЕК>

<X1> <Y1>

<X2> <Y2>

<XN> <YN>

Пример:

3

1 1

10 15

100 23

#58Удаление

Эта функция используется для удаления точек из документа. Процедура удаления происходит без подтверждения, а после удаления точек их восстановление невозможно.

#59Единичный масштаб

Преобразовывает документ к первоначальному масштабу.

#60Показать весь документ

Изменяет масштаб так, чтобы пользователь видел содержимое всего документа.

#61Увеличить масштаб

Увеличивает масштаб в два раза. Максимально возможное увеличение - в 16 раз.

#62Уменьшить масштаб

Уменьшает масштаб в два раза.

#63Показывать точки

Разрешает или запрещает отображать точки в документе.

#64Показывать номера точек

Разрешает или запрещает показывать номера точек.

#65Помощь

Помощь по приложению.

#66Удалить

Воспользуйтесь этим диалоговым окном, чтобы удалить точки по координатам.

{bmc DelDlg.bmp}

В первом поле выберите номер точки, в остальных двух автоматически появятся ее координаты. Нажмите на кнопку “Delete”, если хотите удалить эту точку. После удаления диалог запустится снова. Нажмите “Cancel”, если вы не хотите удалять точки.

Примечание: диалоговое окно выполняется только если в документе есть хотя бы одна точка.

#67Редактировать

Воспользуйтесь этим диалоговым окном, чтобы редактировать координаты точек.

{bmc EditDlg.bmp}

В первом поле выберите номер точки, в остальных двух автоматически появятся ее координаты. Измените координаты и нажмите на кнопку “Update”, чтобы изменения вступили в силу. Диалог запустится снова. Нажмите “Cancel”, если вы не хотите менять координаты точек.

Примечание: диалоговое окно выполняется только если в документе есть хотя бы одна точка.

#68Генерация случайных точек

Воспользуйтесь этим диалогом, чтобы создать случайную структуру точек.

{bmc RandomDlg.bmp}

В поле “Amount” укажите количество точек, которое хотите сгенерировать. Это не фактическое число точек, которые будут сгенерированы, это число означает, что программа попытается создать указанное число точек.

Чтобы изменить область генерации точек нужно выбрать пункт “User bounds” и задать новую область. Для этого в поля X, Y необходимо ввести координаты левого верхнего угла области генерации, а в полях “Size” размеры по координатам X и Y соответственно.

Примечание: диалог не запускается если число точек в документе превышает 10000.

#69Алгоритм

Оригинал см. в гл. 6 в файле geo.pdf

Построение выпуклой оболочки конечного множества точек (особенно в случае точек на плоскости) довольно широко и глубоко исследовано и имеет целый ряд геометрических приложений. Известно, что нижняя оценка нахождения упорядоченной границы выпуклой оболочки n точек на плоскости составляет , и существуют алгоритмы ее построения за время при памяти с использованием только арифметических операций. Известен алгоритм, интересный с точки зрения его быстродействия (статья D.G.Kirpatrick & R.Seidel “The ultimate planar convex hull algorithm” (SIAM Journal on Computing, 15(2) 1986)). Его сложность составляет , а значит, он асимптотически оптимален. Ниже приводится перевод фрагмента упомянутой статьи:

Отсечение и поиск - техника, используемая для отыскания медианы по Блуму, Флойду, Пратту и Тарьяну. Техника, примененная к поиску медианы, выделяет постоянную долю чисел на каждой итерации цикла. Решение рекуррентного уравнения дает нам время алгоритма поиска медианы.

При поиске медианы в списке, мы сначала обобщим проблему.

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

Следовательно, число разделяет список на 2 подсписка и , такие, что все числа в меньше или равны и все числа в больше или равны . Кроме этого, размер каждого из этих двух подсписков минимально составляет от начального списка. Теперь, если подсписок включает более чисел, рекурсивно вызывается алгоритм поиска минимальных чисел в списке . С другой стороны, если подсписок включает чисел, таких что , рекурсивно вызывается алгоритм поиска минимальных чисел в подсписке . В любом случае, из всей величины списка мы обрабатываем максимум от начального списка . Детали обсуждения алгоритма здесь опускаются. Проведем анализ выше описанного алгоритма поиска медианы.

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

Имеется- целое, т.ч. и ,из чего несложно удостовериться по индукции в том, что

Таким образом.

Неформально основная идея алгоритма поиска и отсечения может быть описана следующим образом:

Алгоритм отсечения и поиска

Входные данные: Задача размера

Выходные данные: Решение этой задачи

НАЧАЛО

  1. Если размер задачи – небольшой, непосредственно решаем и останавливаемся.

  2. Разделение задачи на небольших задач, размера таким образом, что .

Здесь - фиксированная константа.

  1. Рекурсивное решение задач .

  2. После обработки результатов выполнения Шага 2 получаем решение задачи.

КОНЕЦ

Допустим, что временная сложность алгоритма Отсечения и Поиска составляет и что Шаг1 и Шаг3 алгоритма потребуют время . Тогда функция может быть представлена как следующее соотношение:

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

Алгоритм построения выпуклой оболочки

(Кирпатрика – Сайделя).

Представим алгоритм Отсечения и Поиска для построения выпуклой оболочки, которым обязаны Кирпатрику и Сайделю. Рассмотрим сначала следующую задачу:

ЗАДАЧА:

Заданы два набора è точек на плоскости, так, что есть такая вертикальная линия , ÷òî - слева от è – справа от . Как найти верхний мостик между è , т.е. линию, проходящую через точку в и точку в таким образом, что все точки из è лежат ниже этой линии?

 алгоритме ‘Слияния оболочек ‘, мы знаем, что когда выпуклая оболочка обоих наборов è известна, верхний мостик может быть сконструирован за линейное время при подъеме отрезка между è до тех пор, пока уже больше не сможем поднимать отрезок. Однако построение выпуклой оболочки над è само требует времени , которое чересчур велико для нас, т.к. мы ожидаем от алгоритма линейного времени решения задачи.

В решении вышеописанной задачи использована технология Отсечения и Поиска. Главная идея касается поиска “подходящих” линий за время , линий, которые позволяют отбросить постоянную долю точек, как кандидатов на попадание в мостик. Мы используем рекурсию относительно оставшихся точек.

Соседние файлы в папке HLP