Расскажу секрет о том, как быстро проверить выполнение условия Делоне для двух треугольников.
Собственно сама оптимизация описана немного ниже(см.«Оптимизация алгоритма проверки условия Делоне через уравнение описанной окружности»), но расскажу обо всем по порядку.
В моем случае триангуляция применяется в трассировке изображения, для разбиения плоскости на примитивные сектора (треугольники). Как известно, она делится также на несколько этапов: корректировка, выявление границ, обход границ, заметание контуров. Это в самом общем виде. Я бы хотел остановиться, думаю, на самом сложном этапе: заметание плоскости.
Рисунок 1
Рисунок 2
Рисунок 3
Рисунок 4
Еще одно но: при сохранении очередного треугольника необходимо записывать вершины в обходе по часовой стрелке (в правой системе координат). Это пригодится в дальнейшем для уменьшения вычислительных ресурсов.
2) Повторяем шаг 1 пока не заметаем всю плоскость.
3) Если последовательностей несколько, т.е. одна, а внутри её еще одна или более внутренних контуров (Рисунок 1). Тут необходимо рассмотреть каждую последовательность отдельно. Возьмем очередной внутренний контур. Из одного внешнего и одного внутреннего сделаем два одиночных контура. Для этого нужно найти два «порта» из одного контура в другой. Условие для «портов»: они не должны пересекаться между собой(не должны соприкасаться даже концами), не должны пересекаться с линиями контуров (Рисунок 5).
Рисунок 5
Рисунок 6
4)
Далее следует ввести поочередно все внутренние последовательности в уже образованные, отделенные друг от друга (пункт 3) последовательности. Сливать нужно с той, которая содержит новую. По определению ни одна внутренняя последовательность не касается и не пересекается с другими(как одной внешней, так и всеми возможными внутренними), так что все пройдет гладко.
Найдя порты (Рисунок 6) легко построить новые последовательности и обойти их пунктами 1 и 2 текущего алгоритма (Рисунок 7).
Рисунок 7
5)
После 4-его этапа имеем список треугольников(Рисунок 8). Как бы с задачей уже справились, но осталось сделать картинку красивой: проверить выполнение условия Делоне (Рисунок 9).
Рисунок 8
Рисунок 9
6) Забегая вперед расскажу про шестой пункт. Он заключается в последовательном прогоне по списку полученных треугольников пунктом №5. Сначала метим все треугольники «грязными». В каждом цикле проверяем для каждого треугольника условие Делоне. Если условие не выполняется, то делаем перестроение и помечаем соседей и текущий треугольник «грязными». Если условие выполняется, то метим его чистым. В моей реализации алгоритма, каждый треугольник имеет ссылку на соседей. В этом случае 6-ой пункт работает наиболее быстро.
Мощность вычислений №1: 10 операций умножения/деления и 13 операций сложения/вычитания.
Мощность вычислений №2: 29 операций умножения/деления и 24 операций сложения/вычитания.
С точки зрения вычислительной мощности, которая высчитывается к примеру в книге , выгоднее вариант №1. Его и реализовал, если бы не… (Рисунок 10). Как оказалось после постановки данного метода на «конвейер», получилась неопределенность. Это вариант, когда сам угол А больше 180 градусов. Он рассматривается в книге как один из отдельных частных методов. А с этим пропадает вся его элегантность, прозрачность и производительность. А так же в последствии оказалось, что метод №2 можно очень существенно оптимизировать.
Рисунок 10
Итак имеем:
Проверка условия для точки M(X, Y) уравнением окружности, проходящей через точки A(x1, y1), B(x2, y2), C(x3, y3), можно записать в виде:
(a ⋅ (X^2 + Y^ 2) − b ⋅ X + c ⋅ Y − d) ⋅ sign a ≥ 0
Подробности можно взять в великолепной книге . (Нет, не я ее автор)
Итак, sign a - это знак направления обхода, с самого начала я строил треугольники по часовой стрелке, так что его можно опустить (он равен единице).
A(x1 - X, y1 - Y), B(x2 - X, y2 - Y), B(x3 - X, y3 - Y);
D >= 0
Рисунок 11
Просто не правда ли?
Согласно книге, опять же,
(x1^2 + y1^2)*(y2*x3 - x2*y3) + (x2^2 + y2^2)*(x1*y3 - y1*x3) + (x3^2 + y3^2)*(y1*x2 - x1*y2) <= 0
Имеем: 15 операций умножения/деления и 14 операций сложения/вычитания.
Спасибо за внимание. Жду критики.
Триангуляцией называется планарный граф, все внутренние области которого являются треугольниками.
Свойства:
· Триангуляция Делоне взаимно однозначно соответствует диаграмме Вороного для того же набора точек.
· Как следствие: если никакие четыре точки не лежат на одной окружности, триангуляция Делоне единственна.
· Триангуляция Делоне максимизирует минимальный угол среди всех углов всех построенных треугольников, тем самым избегаются "тонкие" треугольники.
· Триангуляция Делоне максимизирует сумму радиусов вписанных шаров.
· Триангуляция Делоне минимизирует дискретный функционал Дирихле.
· Триангуляция Делоне минимизирует максимальный радиус минимального объемлющего шара.
· Триангуляция Делоне на плоскости обладает минимальной суммой радиусов окружностей, описанных около треугольников, среди всех возможных триангуляций.
Рис 1. Триангуляция.
Выпуклой триангуляцией называется такая триангуляция, для которой минимальный многоугольник, охватывающий все треугольники, будет выпуклым. Триангуляция, не являющаяся выпуклой, называется невыпуклой.
Задачей построения триангуляции по заданному набору двумерных точек называется задача соединения заданных точек непересекающимися отрезками так, чтобы образовалась триангуляция.
Говорят, что триангуляция удовлетворяет условию Делоне, если внутрь окружности, описанной вокруг любого построенного треугольника, не попадает ни одна из заданных точек триангуляции.
Триангуляция называется триангуляцией Делоне, если она является выпуклой и удовлетворяет условию Делоне.
Рис 2. Триангуляция Делоне.
Воспользуемся пустым шаром, который мы будем перемещать, изменяя его размер так, чтобы он мог касаться точек системы {А}, но всегда оставался пустым.
Итак, поместим в систему точек {А} пустой шар Делоне. Это всегда возможно, если выбрать шар достаточно малым. Начнем увеличивать его радиус, оставляя центр шара на месте. В какой-то момент поверхность шара встретит некоторую точку i системы {А}. Это обязательно произойдет, ибо в нашей системе нет неограниченно больших пустот. Будем продолжать увеличивать радиус пустого шара так, чтобы точка i оставалась на его поверхности. Для этого придется двигать центр шара от точки i. Рано или поздно шар достигнет своей поверхностью другой точки системы {А}.
Рис.3
Симплексы Делоне заполняют пространство без щелей и наложений.
Описанная сфера любого симплекса не содержит внутри себя других точек системы.
Пусть это будет точка j. Продолжим увеличивать радиус нашего шара, сохраняя уже обе точки на его поверхности. Увеличиваясь, шар достигнет какой-то третьей точки системы, точки k. В двумерном случае наш "пустой круг" в этот момент зафиксируется, т.е. станет невозможным дальнейшее увеличение его радиуса при сохранении круга пустым. При этом мы выявляем элементарную двумерную конфигурацию трех точек (i,j,k), определяющую некий треугольник, особенностью которого является то, что внутри его описанной окружности нет других точек системы {А}. В трехмерном пространстве шар не определяется тремя точками. Продолжим увеличивать его радиус, сохраняя все три найденные точки на его поверхности. Это будет возможно до тех пор, пока поверхность шара не встретится с четвертой точкой l системы. После этого движение и рост пустого шара станут невозможными. Найденные четыре точки (i,j,k,l) определяют вершины тетраэдра, который характерен тем, что внутри его описанной сферы нет других точек системы {А}. Такой тетраэдр называется симплексом Делоне.
Симплексом в математике называют простейшую фигуру в пространстве данной размерности: тетраэдр - в трехмерном пространстве; треугольник - в двумерном. Произвольная тройка (четверка) точек системы, не лежащих в одной плоскости, всегда определяет некий симплекс. Однако он будет симплексом Делоне только с том случае, если его описанная сфера пуста. Другими словами, симплексы Делоне определяются особым выбором троек (четверок) точек в системе {А}.
Мы построили один симплекс Делоне, однако, помещая пустой шар в различные места и повторяя ту же процедуру, можно определить и другие. Утверждается, что совокупность всех симплексов Делоне системы {А} заполняет пространство без наложений и щелей, т.е. реализует разбиение пространства, но на этот раз на тетраэдры. Это разбиение называется разбиением Делоне (рис.3).
Часто триангуляции Делоне применяются в евклидовом пространстве. Минимальное евклидово остовное дерево гарантированно располагается на триангуляции Делоне, поэтому некоторые алгоритмы пользуются триангуляцией. Также через триангуляцию Делоне приближённо решается евклидова задача о коммивояжёре.
В двумерной интерполяции триангуляция Делоне разбивает плоскость на самые "толстые" треугольники, насколько это возможно, избегая слишком острых и слишком тупых углов. По этим треугольникам можно строить, например, билинейную интерполяцию.
Еще одной часто возникающей в геоинформатике задачей является построение экспозиций склонов. Здесь требуется определить доминирующие направления склонов по странам света и разбить поверхность на регионы, в которых доминирует некоторое определенное направление. Так как для горизонтальных участков поверхности определение экспозиции не имеет смысла, то в отдельный регион выделяют области, являющиеся горизонтальными или имеющие незначительный уклон, например б<5 о. По странам света деление обычно выполняется на 4, 8 или 16 частей.
Рис.4.
Задача расчета экспозиций склонов обычно используется для анализа освещенности Земли. В связи с этим часто возникает потребность дополнительного учета текущего положения Солнца, т.е. экспозиция вычисляется как направление между нормалью к треугольнику и направлением на Солнце.
Таким образом, каждый треугольник триангуляции может быть проклассифицирован по принципу принадлежности к тому или иному региону. После этого нужно просто вызвать алгоритм выделения регионов.
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
КУРСОВОЙ ПРОЕКТ
ПОСТРОЕНИЕ ТРИАНГУЛЯЦИИ ДЕЛОНЕ
по дисциплине "Структуры и алгоритмы обработки данных "
Содержание
Теоретическая информатика - математическая дисциплина, использующая методы математики для построения и изучения моделей обработки, передачи и использования информации. Она опирается на математическую логику и включает такие разделы как теория алгоритмов и автоматов, теория информации и теория кодирования, теория формальных языков и грамматик, исследование операций и другие.
Вычислительная геометрия - это раздел информатики, изучающий алгоритмы решения геометрических задач. Такие задачи встречаются в машинной графике, проектировании интегральных схем, технических устройств и др. Исходными данными такого рода задач могут быть множество точек на плоскости, набор отрезков, многоугольник и т.п. Геометрические задачи в информатике встречаются довольно часто, так как компьютер является очень удобным и быстродействующим средством для их решения, поскольку ручной счёт здесь абсолютно неприменим.
Делоне является одной из базовых в вычислительной геометрии. К ней сводятся многие другие задачи, она широко используется в машинной графике и геоинформационных системах для моделирования поверхностей и решения пространственных задач. Впервые задача построения триангуляции Делоне была поставлена в 1934 г. в работе советского математика Бориса Николаевича Делоне.
Итак, поместим в систему точек {А} пустой шар Делоне. Это всегда возможно, если выбрать шар достаточно малым. Начнем увеличивать его радиус, оставляя центр шара на месте. В какой-то момент поверхность шара встретит некоторую точку i системы {А}. Это обязательно произойдет, ибо в нашей системе нет неограниченно больших пустот. Будем продолжать увеличивать радиус пустого шара так, чтобы точка i оставалась на его поверхности. Для этого придется двигать центр шара от точки i. Рано или поздно шар достигнет своей поверхностью другой точки системы {А}.
Пусть это будет точка j. Продолжим увеличивать радиус нашего шара, сохраняя уже обе точки на его поверхности. Увеличиваясь, шар достигнет какой-то третьей точки системы, точки k. В двумерном случае наш "пустой круг" в этот момент зафиксируется, т.е. станет невозможным дальнейшее увеличение его радиуса при сохранении круга пустым. При этом мы выявляем элементарную двумерную конфигурацию трех точек (i,j,k), определяющую некий треугольник, особенностью которого является то, что внутри его описанной окружности нет других точек системы {А}. В трехмерном пространстве шар не определяется тремя точками. Продолжим увеличивать его радиус, сохраняя все три найденные точки на его поверхности. Это будет возможно до тех пор, пока поверхность шара не встретится с четвертой точкой l системы. После этого движение и рост пустого шара станут невозможными. Найденные четыре точки (i,j,k,l) определяют вершины тетраэдра, который характерен тем, что внутри его описанной сферы нет других точек системы {А}. Такой тетраэдр называется симплексом Делоне.
Симплексом в математике называют простейшую фигуру в пространстве данной размерности: тетраэдр - в трехмерном пространстве; треугольник - в двумерном. Произвольная тройка (четверка) точек системы, не лежащих в одной плоскости, всегда определяет некий симплекс. Однако он будет симплексом Делоне только с том случае, если его описанная сфера пуста. Другими словами, симплексы Делоне определяются особым выбором троек (четверок) точек в системе {А}.
Мы построили один симплекс Делоне, однако, помещая пустой шар в различные места и повторяя ту же процедуру, можно определить и другие. Утверждается, что совокупность всех симплексов Делоне системы {А} заполняет пространство без наложений и щелей, т.е. реализует разбиение пространства, но на этот раз на тетраэдры. Это разбиение называется разбиением Делоне (рис.3).
Еще одной часто возникающей в геоинформатике задачей является построение экспозиций склонов. Здесь требуется определить доминирующие направления склонов по странам света и разбить поверхность на регионы, в которых доминирует некоторое определенное направление. Так как для горизонтальных участков поверхности определение экспозиции не имеет смысла, то в отдельный регион выделяют области, являющиеся горизонтальными или имеющие незначительный уклон, например б<5 о. По странам света деление обычно выполняется на 4, 8 или 16 частей.
4. Если точка попала на ранее вставленный узел триангуляции, то такая точка обычно отбрасывается, иначе точка вставляется в триангуляцию в виде нового узла. При этом если точка попала на некоторое ребро, то оно разбивается на два новых, а оба смежных с ребром треугольника также делятся на два меньших. Если точка попала строго внутрь какого - нибудь треугольника, он разбивается на три новых. Если точка попала вне триангуляции, то строится один или более треугольников.
" Удаляй и строй " не выполняется никаких перестроений. Вместо этого при каждой вставке нового узла (а) сразу же удаляются все треугольники, у которых внутрь описанных окружностей попадает новый узел (б). При этом все удаленные треугольники неявно образуют некоторый многоугольник. После этого на месте удаленных треугольников строится заполняющая триангуляция путем соединения нового узла с этим многоугольником (рис. в).
Данный алгоритм строит сразу все необходимые треугольники в отличие от обычного итеративного алгоритма, где при вставке одного узла возможны многократные перестроения одного и того же треугольника. Однако здесь на первый план выходит процедура выделения контура удаленного многоугольника, от эффективности работы которого зависит общая скорость алгоритма. В целом в зависимости от используемой структуры данных этот алгоритм может тратить времени меньше, чем алгоритм с перестроениями, и наоборот.
В нем необходимо, последовательно переходя по треугольникам вдоль вставляемого отрезка, находить точки его пересечения с рёбрами триангуляции. В этих точках пересечения нужно поставить но-вые узлы триангуляции, разбив существующие рёбра и треугольники на части. После этого все вновь построенные треугольники долж-ны быть проверены на выполнение условия Делоне и при необходимости перестроены, не затрагивая фиксированных рёбер.
Для выполнения поиска треугольника, в который попадает текущая вставляемая в триангуляцию точка, необходимо выполнить нестандартный точечный запрос к k-D-дереву. Поиск в дереве необходимо начинать с корня и спускаться вниз до листьев. В случае если потомки текущего узла k-D-дерева (охватывающий потомки прямоугольник) не покрывают текущую точку, то необходимо выбрать для дальнейшего спуска по дереву потомка, ближайшего к точке поиска.
Вычислительная сложность алгоритма - это функция, определяющая зависимость объёма работы, выполняемой некоторым алгоритмом, от размера входных данных. Объём работы обычно измеряется абстрактными понятиями времени и пространства, называемыми вычислительными ресурсами. Время определяется количеством элементарных шагов, необходимых для решения проблемы, тогда как пространство определяется объёмом памяти или места на носителе данных.
Трудоемкость поиска треугольника в R-дереве в худшем случае составляет O (N), а в среднем O (log N). При этом может быть найдено от 1 до N треугольников, которые надо затем все проверить. Кроме того, появляются дополнительные затраты времени на поддержание структуры дерева - O (log N) при каждом построении и удалении треугольников. Отсюда получаем, что трудоемкость алгоритма триангуляции с индексированием треугольников в худшем случае составляет, а в среднем - O (N log N).
Трудоемкость поиска точки в k-D-дереве в худшем случае составляет O (N), а среднем - O (logN). Далее может быть задействована процедура перехода по треугольникам, которая может иметь трудоемкость в худшем случае O N (). Также здесь имеются дополнительные затраты времени на поддержание структуры дерева - O N (log) при каждом построении и удалении треугольников.
В веерном алгоритме триангуляции (алгоритме радиального заметания плоскости) вначале из исходных точек выбирается та, которая находится как можно ближе к центру масс всех точек. Далее для остальных точек вычисляется полярный угол относительно выбранной центральной точки и все точки сортируются по этому углу. Затем все точки соединяются рёбрами с центральной точкой и соседними в отсортированном списке. Потом триангуляция достраивается до выпуклой. И в заключение производится полное перестроение триангуляции для выполнения условия Делоне.
триангуляция делоне программный алгоритм
Рис. 6. Интерфейс программы
1. Скворцов А.В. Триангуляция Делоне и ее применение. /Скворцов А.В. - Томск: Изд-во Том. Ун-та, 2012. - 128с.
2. Попов С.А. Вычислительные методы и программирование. /Попов С.А. - Москва: Изд-во МГУ, 2008, - 24с.
3. Медведев Н.Н. Метод Вороного - Делоне в исследовании структуры некристаллических систем / РАН, Новосибирск: Изд-во СО РАН, 2009, - 214с.
Размещено на Allbest.ru
Метод пустого шара Делоне. Симплициальное разбиение (триангуляция). Особенности взаимного расположения симплексов Делоне. Алгоритм построения круга Делоне. Возможности программирования с помощью технологии Microsoft Windows Presentation Foundation.
курсовая работа , добавлен 14.05.2011
Изучение возможностей программы "Поверхность": рассмотрение методов построения изолиний, диаграмм Вороного, профиля, интерполированного графика, трехмерной визуализации, поверхностей методом триангуляции Делоне и проведение расчета зон прямой видимости.
краткое изложение , добавлен 11.02.2010
Теоретическое исследование вопроса и практическое применение. Общие сведения о графах. Алгоритм Дейкстры. Особенности работы в среде. Программная реализация. Описание алгоритма и структуры программы. Описание программных средств. Текст программы.
курсовая работа , добавлен 27.11.2007
Построение структурных схем - графических представлений алгоритмов цифровой фильтрации. Возможные варианты синтеза структур на примере рекурсивных фильтров. Построение разностного уравнения таких фильтров с записью системной функции в общем виде.
презентация , добавлен 19.08.2013
Описание проектного решения стратегической системы, этапы объектно-ориентированного анализа и проектирования. Описание связей между объектами. Программная реализация, построение модели состояний объекта. Руководство пользователя и описание программы.
курсовая работа , добавлен 17.11.2011
Основные особенности эволюционных алгоритмов. Описание алгоритмов селекции, мутации, скрещивания, применяемых для реализации генетических алгоритмов. Вычисление функции приспособленности. Программная реализация. Тестирование и руководство пользователя.
курсовая работа , добавлен 11.03.2014
Этапы развития компьютерной графики. Общее понятие про трехмерную графику. Организация процесса построения проекции. Проволочная модель, отсечение нелицевых граней, вращение. Программная реализация построения изображения. Построение сложных моделей.
курсовая работа , добавлен 11.06.2012
Семантические сети как модели представления знаний. Основные методы определения сходства графовых моделей систем. Метод решения задач определения сходства семантических сетей на основе их сложности. Разработка алгоритмов и их программная реализация.
дипломная работа , добавлен 17.12.2011
Описание процесса сканирования в упрощенном виде. Описание компонентов метамодели и их возможных состояний. Инициаторы и результанты, классы эквивалентности. Операции над процессами: репозиция, редукция, композиция. Построение сети Петри и ее свойства.
курсовая работа , добавлен 13.06.2011
Построение концептуальной модели и метод имитационного моделирования. Определение переменных уравнений математической модели и построение моделирующего алгоритма. Описание возможных улучшений системы и окончательный вариант модели с результатами.
Задача построение сети неперекрывающихся треугольников является одной из базовых в вычислительной геометрии и широко используется в машинной графике и геоинформационных системах для моделирования поверхности и решения пространственных задач.
Впервые задача построения сети неперекрывающихся треугольников была поставлена в 1934 году в работе советского математика Б. Н. Делоне, который сформулировал и соответствующие условия.
В математике задачей построения триангуляции по заданным точкам называют задачу их попарного соединений непересекающимися отрезками так, чтобы образовалась сеть треугольников. Основными ее элементами являются (рис.5.3): узлы (вершины треугольников), ребра (стороны) и грани (собственно треугольники). Построенная триангуляция может быть выпуклой (если таковым будет минимальный многоугольник, охватывающий область моделирования), невыпуклой (если триангуляция не является выпуклой) и оптимальной (если сумма длин всех ребер минимальна).
Сеть таких треугольников называется триангуляцией Делоне, если она удовлетворяет некоторым условиям:
Внутрь окружности, описанной вокруг любого треугольника, не попадает ни одна из исходных точек (рис. 5.3);
Триангуляция является выпуклой и удовлетворяет сформулированному выше условию Делоне;
Сумма минимальных углов всех треугольников максимальна из всех возможных триангуляций;
Сумма радиусов окружностей, описанных около треугольников, минимальна среди всех возможных триангуляций .
Первый из названных выше критериев построения триангуляции Делоне, называемый круговым, является одним из основных и проверяется для любой пары треугольников с общими гранями. Математическая интерпретация критерия вытекает из рис. 5.3:
(5.2)
Существует множество способов построения триангуляции Делоне, которая является одним из самых популярных в последнее время способов построения триангуляционной сетки. Она применяется во многих ГИС системах для построения моделей рельефа.
В приложении к двумерному пространству она формулируется следующим образом: система взаимосвязанных неперекрывающихся треугольников имеет наименьший периметр, если ни одна из вершин не попадает внутрь ни одной из окружностей, описанных вокруг образованных треугольников (рис. 5.4).
Рис. 5.4. Триангуляция Делоне
Это означает, что образовавшиеся треугольники при такой триангуляции максимально приближаются к равносторонним, а каждая из сторон образовавшихся треугольников из противолежащей вершины видна под максимальным углом из всех возможных точек соответствующей полуплоскости. Это именно та оптимальная триангуляция, по ребрам которой делается обычно линейная интерполяция для построения изолиний.
Многие алгоритмы построения триангуляции Делоне используют следующую теорему .
Теорема 1. Триангуляцию Делоне можно получить из любой другой триангуляции по той же системе точек, последовательно перестраивая пары соседних треугольников ABC и BCD, не удовлетворяющих условию Делоне, в пары треугольников ABD и ACD (рис. 5.5).
Рис. 5.5.. Перестроение треугольников, не удовлетворяющих условию Делоне
Такую операцию перестроения часто называют флипом. Данная теорема позволяет строить триангуляцию Делоне последовательно, вначале строя некоторую триангуляцию, а потом последовательно улучшая ее в смысле условия Делоне. При проверке условия Делоне для пар соседних треугольников можно использовать непосредственно определение, но иногда используются другие способы, основанные на условиях, перечисленных выше.
В данных условиях фигурирует суммарная характеристика всей триангуляции (сумма минимальных углов или сумма радиусов), оптимизируя которую можно получить триангуляцию Делоне.
Как было сказано выше одна из важнейших операций, выполняемых при построении триангуляции, является проверка условия Делоне для заданных пар треугольников. На основе определения триангуляции Делоне и соответствующих условий на практике обычно используют несколько способов проверки:
– проверка через уравнение описанной окружности;
– проверка с заранее вычисленной описанной окружностью;
– проверка суммы противолежащих углов;
– модифицированная проверка суммы противолежащих углов.
В многих системах выполняется проверка с заранее вычисленной описанной окружностью. Основная идея алгоритма проверки через заранее вычисленные окружности заключается в предварительном вычислении для каждого построенного треугольника центра и радиуса описанной вокруг него окружности, после чего проверка условия Делоне будет сводиться к вычислению расстояния до центра этой окружности и сравнению результата с радиусом. Центр и радиус r окружности, описанной вокруг можно найти как , , , r 2 = (b 2 + с 2 - 4аd)/4а 2 , где значения а, b, с, d определены по формулам (5.3)
(5.3)
Другая запись уравнения этой окружности имеет вид:
(5.5.)
(5.6)
Тогда условие Делоне для будет выполняться только тогда, когда для любой другой точки триангуляции будет:
(x 0 – x C) 2 + (y 0 – y C) 2 ≥ r 2 . (5.7)
В настоящее время существует множество алгоритмов построения триангуляции Делоне. Многие из известных алгоритмов используют определение триангуляции Делоне как вторичный признак триангуляции. Поэтому в таких алгоритмах отмечаются следующие слабости:
– алгоритмы используют постоянно вычисляемые тригонометрические функции, что резко замедляет процесс;
– при исследовании взаимоотношения точек и базового отрезка возникают очень малые углы, и при использовании тригонометрических функций постоянно появляется опасность исчезновения порядка и деления на 0 в связи с ограниченной точностью представлений данных в компьютере, эта ситуация требует постоянной дополнительной обработки .
Наиболее известные программные продукты строят триангуляцию Делоне, используя теорему о пустом шаре как основной, первичный принцип построения треугольников. Алгоритм выглядит так:
– все множество точек делится на треугольники, т.е. создаются комбинации из трех точек;
– для каждой комбинации находится описанная окружность и координаты ее центра;
– если внутри окружности текущей комбинации не находится ни одной точки из оставшихся то эта комбинация есть треугольник – часть триангуляции Делоне.
К достоинствам этого алгоритма можно отнести:
– отсутствие использования тригонометрических функций, что не замедляет процесс построений;
– непосредственное построение триангуляции Делоне, без каких – либо предварительных построений;
– простота всех вычислений и преобразований;
– в итоге триангуляционная сетка представлена множеством треугольников, а не отдельных линий.
Построенная таким образом триангуляция является геометрической основой для построения изолиний.
Алгоритмы построения триангуляции Делоне можно разделить на ряд групп, различающиеся структурой используемых входных данных, объемом вычислительных операций, исходными предпосылками и др. Рассмотрим некоторые из них.
Алгоритмы слияния предполагают разбиение множества исходных точек на подмножества, построение на каждом из них триангуляции и последующее их объединение в единую сеть. Сущность одного из таких алгоритмов сводится к следующему.
Множество исходных точек делится вертикальными линиями на две или более частей, после чего каждая из них разделяются горизонтальными и вертикальными линиями на примерно равные части. В результате вся область исходных точек оказывается разделенной на примитивы по три – четыре точки (рис. 2.4), по которым строятся один – два треугольника.
Слияние этих треугольников в единую сеть выполняется путем построения двух базовых линий (P 0 P 1 и P 2 P 3 , рис. 5,7.а), проведении окружностей переменного радиуса с центром на серединном перпендикуляре к базовой линии (рис. 5.7, б), поиску попадающего на окружность узла (точка A , рис. 5.7. в) и построению нового треугольника (P 0 P 1 A). При этом может возникнуть необходимость удаления уже существующего треугольника (например, P 0 AB) .
Итеративные алгоритмы основаны на идее последовательного добавления точек в частично построенную триангуляцию с одновременным ее улучшением и перестроением в соответствии с критериями Делоне. В общем виде они включают несколько шагов и сводятся к построению треугольника на первых трех исходных точках и исследованию нескольких вариантов размещения очередной точки. В частности, рассматриваются варианты ее попадания за границу области моделирования, на существующий узел или ребро, внутрь построенного треугольника и др. Каждый из этих вариантов предполагает выполнение определенной операции: разбивки ребра на два, грани – на три и т.д.; после чего выполняется проверка полученных треугольников на соответствие условию Делоне и необходимые перестроения.
Двухпроходные алгоритмы, предусматривают вначале построение некоторой триангуляции, игнорируя условия Делоне, а затем – ее перестроение в соответствии с этими условиями. Пример применения алгоритма приведен на рис. 5.8.
Для приближения создаваемой модели рельефа к реальной в нее внедряются дополнительные элементы, обеспечивающие учет и отображение ее линейных и площадных структурных элементов. Такими дополнительными элементами являются широко используемые в топографии структурные линии, определяющие «скелет рельефа»: водоразделы, тальвеги, хребты, обрывы, уступы, озера, овраги, береговые линии, границы искусственных сооружений и др., совокупность которых создает как бы каркас триангуляции Делоне. Эти структурные линии внедряются в триангуляцию в качестве ребер треугольников, чем и достигается моделирование реальных элементов рельефа на фоне общих неровностей земной поверхности. Такие ребра называются структурными (фиксированными, неперестраиваемыми), не пересекают ребра других треугольников и в последующем не изменяются.
Задача построения модели поверхности с учетом структурных линий называется триангуляцией Делоне с ограничениями, если условия Делоне выполняются для любой пары смежных треугольников, которые не разделяются структурными линиями. Наиболее эффективно, считают исследователи, выполняется построение такой триангуляции с помощью итеративных алгоритмов.
Алгоритмы построения триангуляции Делоне реализуются с вещественным или целочисленным представлением координат узлов, что позволяет существенно повысить скорость и точность обработки, но порождает проблемы поиска и исключения совпадающих узлов.
Модель TIN легко редактируется путем перемещения узлов, вставки новых, удаления имеющихся, изменения положения одного или нескольких ребер, внедрения новых структурных линий и др. Такие изменения всегда затрагивают небольшую группу смежных треугольников, не требуют перестроения всей сети и осуществляются в режиме on-line, по указанию курсором на соответствующий элемент .
О точности:
Располагая пикеты на характерных элементах рельефа (например, водоразделах и тальвегах), мы игнорируем более мелкие элементы в промежутках. При построении горизонталей1 по таким ребрам треугольников возникает ошибка, которая зависит от величины неровности рельефа и угла наклона местности. Например, средняя погрешность съемки рельефа, не должна превышать 1/3 сечения рельефа при углах наклона поверхности от 2 до 10 градусов. Можно рассчитать, что при сечении рельефа 0,5 м предельная величина пропущенной неровности (то есть отклонения поверхности земли от прямой, проходящей через соседние пикеты) не должна превышать (0,5/3)*cos10°=0,16 м.
Для точности определения объема перемещаемого грунта важна также площадь, занимаемая не учитываемой деталью рельефа. Допустим, в квадрате 20х20 м между двумя парами пикетов имеется цилиндрическая выпуклость с максимальной высотой 0,15 м. Нетрудно подсчитать, что ее неучет при представлении данной поверхности только двумя треугольниками приведет к ошибке приблизительно в 40 м3. Не так уж много, но для участка в 1 га, расположенного на холме или верхней (как правило, выпуклой) части склона, получится уже 40*25=1000 м3 лишнего грунта. Если же брать пикеты в два раза чаще (то есть через 10 м), ошибка уменьшится вчетверо и составит 250 м3 на гектар. Этот фактор можно учесть заранее, поскольку положительные формы равнинного рельефа обычно имеют выпуклую форму, а отрицательные – вогнутую. Если на подлежащий съемке участок имеются приближенные данные о рельефе, то радиус кривизны поверхности и необходимую густоту пикетов легко рассчитать по величинам заложения горизонталей или отдельным высотным отметкам.
GRID- модели – модели регулярных ячеек.
Пусть
введена система координат
ии
.
Пользователь задает
и шаги дискретизации
.
,
- физические координаты точки.
Вычисляем
и
,
- разрядная сетка.
- квантованные значения. Реальные:
- параметр алгоритма – количество точек, - вес. Чем ближе точка, тем больше вес.
- степень расстояния (1 или 2).
Нормировочный
коэффициент:
Чем ближе к 1, тем больше учитываются точки с большим весом.
Это
метод IDW – долгий, для каждой т. необходимо
найти соседей. Набор соседей может быть
эффективно найден - ближайшим. Каждая
из точек продуцирует «колышек»
определенной высоты. От нерегулярности
постановок точки многое зависит, для
этого берут
или
т.е. разделяют на сектора и в окрестности
точки строим.
Преимущество – простота
Недостаток:
Триангуляция – построение функции в виде совокупности кусочно - линейной функции
Триангуляция – интерполяция внутри выпуклой области.
Триангуляция – планарный граф, все внутренние ребра которого – треугольники; способ представления пространства в виде примыкающих друг к другу треугольников без перекрытий. На наборе точек триангуляция строится несколькими способами.
Нужен алгоритм для построения оптимальной триангуляции.
Плоскость, проходящая через 3 точки.
1)
Найдем треугольник, который
;
2)
- строим уравнение плоскости.
Чтобы проверить находятся ли точки внутри треугольника или нет, необходимо подставить значение в уравнение линий – ребер треугольника. Если все 3 уравнения > 0, то внутри.
Структура представления:
Каждая триангуляция содержит одинаковое количество треугольников.
,
где
– количество внутренних точек,
– количество точек.
Жадный триангуляция.
Все точки соединяем ребрами, выбираем минимум, добавляем в триангуляцию. Далее берем следующий минимум, не пересекающийся с предыдущими и т.д. В результате получена жадная триангуляция.
Триангуляция Делоне.
Внутрь окружности, описанной вокруг любого треугольника, не попадают точки других треугольников. Строится единственным образом.
Флипом называется переброска ребер. Она позволяет перейти от обычной триангуляции к триангуляции Делоне. Чтобы проверить принадлежность точки к окружности: подставить, если < R, то внутри.
Условие Делоне.
Уравнение окружности, проходящей через три точки:
Если меньше нуля, то внешняя, иначе – внутренняя.
–условие Делоне.
Алгоритм построения триангуляции Делоне:
1) Подследственного добавления точек – простой итеративный алгоритм:
Есть
набор
добавляем в треугольник, осуществляется
построение
разбиение треугольника
перестроение. На нулевом этапе добавляем
3-4 фиктивные точки, которые заведомо
покрывают наш конверт, все точки внутри.
После кидаем точку, смотрим в какой
треугольник попала, разбиваем на 3, для
каждого треугольника проверяем условие
Делоне и осуществляем флип переброску
ребер. Среднее количество перестроений
равно трем.
Теоретическая
сложность
2) Методы ускорения. Основан на статистически зависимых точках. Затравочный треугольник – треугольник в который попала предыдущая точка. Затем соединяем две точки – предыдущую и новую.
Перемещаемся из первой точки в другую.