ПРЕДВАРИТЕЛЬНАЯ ОБРАБОТКА НАБОРА ТОЧЕК ПРИ ПОСТРОЕНИИ ТРИАНГУЛЯЦИИ ДЕЛОНЕ А.Л. Фукс Введение Триангуляция множества точек на плоскости является важным этапом в задачах, связанных с определением топологических свойств объектов или восстановлением поверхностей, заданных нерегулярными наборами отсчетов. Обычно требуется, чтобы получаемая система треугольников была структурированной, т.е. описание любого треугольника содержало не только номера его вершин, но и номера треугольников, смежных с данным по каждому из трех ребер (либо специальные значения для граничных ребер триангуляции). Среди нескольких известных типов триангуляций на практике обычно применяется триангуляция Делоне, имеющая ряд преимуществ: • при ее построении используется простое локальное условие (никакая точка не может лежать внутри окружности, построенной по трем вершинам треугольника Делоне), для его проверки достаточно анализировать пары смежных треугольников; • несмотря на локальность условия, триангуляция Делоне является однозначной (т.е. не зависит от порядка задания исходных точек) с точностью до множества точек, лежащих на одной окружности, внутри которой нет других точек; • следствием условия Делоне является локальное условие максимума минимального угла (из двух пар треугольников, которые можно построить по четырем точкам, в триангуляцию включается та, у которой минимальный из шести углов будет больше), поэтому получаемые треугольники наиболее близки к равносторонним, что повышает точность последующей интерполяции поверхности [1]. Известно, что в общем случае триангуляцию n точек на плоскости нельзя построить быстрее чем за O ( n ⋅ log n ) [2]. Такую трудоемкость для триангуляции Делоне имеет рекурсивный алгоритм, основанный на стратегии «Разделяй и властвуй» [3]. Однако данный алгоритм логически довольно сложен, количество операций на точку велико, поэтому его преимущества проявляются только при достаточно больших n. Пожалуй, самым простым алгоритмом построения триангуляции Делоне является итеративный: по 3-4 точкам строится начальная триангуляция, а затем все исходные точки по одной добавляются в текущую систему треугольников. Для каждой точки P необходимо провести две основные операции: определить положение (локализовать) P и перестроить систему треугольников. Если в качестве начальных точек взять 4 вершины прямоугольника, объемлющего ис- Предварительная обработка точек при построении триангуляции Делоне 49 ходные точки, то точка P никогда не окажется за границей триангуляции и обязательно попадет внутрь некоторого треугольника ABC. Локализацию точки P можно начинать с любого треугольника текущей системы: если O – некоторая точка этого начального треугольника (например, одна из вершин), то ABC легко найти, последовательно проверяя смежные треугольники вдоль отрезка OP (варианты проверок приведены в [4]). ABC уже не может принадлежать триангуляции, поэтому он разбивается на три новых треугольника с общей вершиной P. Для каждого нового (содержащего точку P) и смежного с ним старого треугольника необходима проверка условия Делоне. При нарушении этого условия производится перестроение нового и старого треугольников: в четырехугольнике, образованном ими, проводится новая диагональ. При этом появляются два новых треугольника, каждый из которых снова проверяется, и т.д. Если всего будет построено t новых треугольников, то это означает, что P соединена ребрами триангуляции Делоне с t вершинами и было проведено 2 ⋅ t − 3 проверок условия Делоне. Трудоемкость локализации одной точки определяется количеством расположенных вдоль отрезка OP треугольников и составляет O ( n ) в среднем и даже O (n ) в наихудшем. Если исходные точки хорошо перемешаны, то число перестроений треугольников обычно невелико, но в важном практическом случае, когда точки являются узлами небольшого числа линий (галсов), количество проведенных из P ребер (а следовательно, проверок условия Делоне) может зависеть от n и достигать таких же порядков, как у локализации. Трудоемкость итеративного алгоритма для конкретного набора точек существенно зависит от порядка их выбора и может изменяться от линейной до квадратичной. В настоящей работе описывается алгоритм предварительной обработки, определяющей такой порядок выбора, при котором для ряда практически важных распределений точек трудоемкость итеративного алгоритма триангуляции Делоне становится близкой к линейной. Доказывается, что если набор точек удовлетворяет определенным ограничениям, то трудоемкость триангуляции будет гарантированно линейной. 2. Предобработка точек Идею метода предобработки поясним на примере с самыми сильными ограничениями. Пусть существуют такие константы kx и ky, что область определения покрывает регулярная сетка из n = (2 kx + 1) ⋅ (2 ky + 1) элементарных ячеек-квадратов одинакового размера, причем в каждый квадрат попадает ровно одна исходная точка, но ее положение внутри ячейки может быть произвольным. Каждый квадрат (и, соответственно, каждая точка) имеет 2 номера: от 0 до 2 kx по координате X и от 0 до 2 ky по Y. Введем понятие слоя как некоторого множества точек: точка принадлежит слою i, если оба ее номера кратны 2 i (то- А.Л. Фукс 50 гда все исходные точки образуют слой 0, слой i+1 будет подмножеством слоя i, а максимальный номер слоя k = min( kx , ky ) ). По значениям пар номеров все точки слоя i можно разделить на 4 подмножества: 1) угловые точки (оба их номера кратны 2 i +1 ) – это слой i+1; 2) X-граничные точки (только номер по координате X кратен 2 i +1 ); 3) Y-граничные точки (только номер по координате Y кратен 2 i +1 ); 4) внутренние точки (оба их номера не кратны 2 i +1 ). Триангуляция проводится за линейное время, если для каждой точки числа проверок при локализации и перестроении треугольников не превышают некоторых фиксированных значений. Этого можно добиться, если при выборе точек придерживаться следующих правил: 1. Новая точка P должна всегда располагаться как можно ближе к предыдущей точке O. Тогда локализацию P нужно всегда начинать с последнего построенного треугольника, так как O обязательно будет одной из его вершин. Отметим, что «близость» O и P определяется только числом проверок, поэтому на начальных шагах триангуляции расстояние между точками O и P может быть достаточно большим, но по мере увеличения числа треугольников оно должно уменьшаться. 2. Все ранее выбранные точки должны формировать такую сетку, которая для каждой новой точки ограничивает область построения новых ребер триангуляции. При этом ограничивается не размер области, а количество попадающих в нее точек, поэтому при увеличении общего числа выбранных точек сетка должна постепенно сгущаться. Реализовать это можно, выбирая точки по слоям: сначала все точки слоя k, затем последовательно слои k-1, k-2 и т.д. до 0. При этом точки, принадлежащие сразу нескольким слоям с номерами i,i-1,...,0, необходимо выбирать только один раз – при обработке слоя i. Алгоритмически наиболее просто проводить выборку точек слоя i<k в три этапа – сначала все внутренние, затем все X-граничные и, наконец, Yграничные. При этом обработку можно организовать так, что номера квадратов предыдущей и новой точек слоя i всегда будут отличаться не более чем на 2 i +1 . На рис. 1 приведен пример выбора точек слоев 1 и 0 для kx=3, ky=2 и n = 9 ⋅ 5 квадратов по этапам: а) все точки слоя 1; б) внутренние точки слоя 0; в) X-граничные точки слоя 0; г) Y-граничные точки слоя 0. Предварительная обработка точек при построении триангуляции Делоне 8 3 1 7 4 9 2 8 7 6 5 1 2 3 4 5 6 а) 1 2 4 3 51 5 6 в) б) 8 7 10 9 4 3 11 8 5 2 12 7 6 1 9 10 г) Рис. 1. Порядок выбора точек слоев 1 и 0. Числа (от 1) определяют порядок выбора квадратов (и точек) на каждом этапе, ранее обработанные квадраты заштрихованы (каждый квадрат выбирается ровно 1 раз). Теорема. Если 2 kx и 2 ky – величины порядка O ( n ) и выбор точек производится описанным выше методом сгущения слоев, то трудоемкость итеративного алгоритма триангуляции Делоне будет линейной. Доказательство. Введем следующие обозначения: A – квадрат (множество точек, принадлежащих квадрату), A – некоторая фиксированная точка квадрата A. Будем называть многоугольником L любую замкнутую ломаную без самопересечений, а многоугольной областью R – множество квадратов, лежащих внутри некоторого многоугольника, либо пересекаемых его ребрами. Из условия Делоне выводится следующее свойство: если через точки A и B можно провести какую-либо окружность, не содержащую внутри себя точек C и P, а отрезки AB и PC пересекаются, то PC не может быть ребром триангуляции Делоне. В нашем случае точки располагаются внутри квадратов произвольно, поэтому используем B «окружность, построенную по A и A B B», которая проводится по четырем A (рис. 2а) или двум (задающим диаметр) вершинам квадратов A и B (рис. 2б). Для любой пары точек A и а) б) B внутри этой окружности находится не только весь отрезок AB, но и не- Рис. 2. Окружности, построенные по которая окружность, проходящая чеквадратам А и B. 52 А.Л. Фукс рез A и B. Будем считать, что квадрат C лежит вне окружности только в том случае, если ни одна из его точек не находится внутри окружности, в противном случае C находится внутри (на рис. 2а и 2б квадраты, лежащие внутри окружности, заштрихованы). Теперь приведенное выше свойство можно изменить: пусть по A и B построена окружность, причем C и P леC D жат вне данной окружности, тогда для любой пары пересекающихся отрезков B B AB и PC отрезок PC не может быть ребром триангуляции Делоне (рис. 3а). A A С другой стороны, если некоторый D P P лежит внутри данной окружности, то может существовать такая точка D, а) б) что P попадает внутрь окружности, построенной по точкам A, B и D, и тоРис. 3. Треугольники Делоне, гда PD может быть ребром триангуляпостроенные по 4 точкам. ции Делоне (рис. 3б). Рассмотрим вначале только такие точки P, которые не расположены на границе сетки квадратов (т.е. номера P не равны 0, 2 kx или 2 ky ). Сгущение слоев проводится таким образом, что для любой P по ранее выбранным точкам можно построить множество многоугольников, внутри которых находится P. Выделим среди них многоугольник Lпар, для которого выполняются следующие условия: 1) если AB – ребро Lпар, то P лежит вне окружности, построенной по квадратам A и B, или A и B расположены на одной границе сетки квадратов; 2) если AB – ребро, а D – ранее выбранная точка внутри Lпар, то при замене AB на ребра AD и DB нарушится условие 1. Затем определим многоугольную область Rпар как объединение области, ограниченной Lпар, и множества квадратов, лежащих внутри какой-либо из окружностей, построенных по квадратам смежных вершин Lпар. Очевидно, что для любой точки C, находящейся за пределами Rпар, отрезок PC пересекает какое-то ребро AB многоугольника Lпар, причем C и P лежат вне окружности, построенной по A и B. Следовательно, только отрезки, соединяющие P с точками, принадлежащими Rпар, могут быть ребрами триангуляции Делоне. Lпар и Rпар легко выделяются на каждом этапе сгущения слоев. На рис. 4 это показано для точек слоя 0: а) – внутренней, б) – X-граничной, в) – Yграничной, г) – Y-граничной при расположении двух вершин Lпар на одной границе сетки квадратов. P отмечает квадрат с новой точкой, O – с предыдущей, Предварительная обработка точек при построении триангуляции Делоне X X X X X X X X X X X X X X X X X X X X X X X O X X X P X X X X X X X X X X X X X X X X X X X O X P X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X б) а) X X X X X X X X X X X X X X X X X X 53 X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X P X X X X X P X X X X X X X X X X X X X X X X X O X X X X X O X X X X X X X X X X X X X X X X X X X X X X X X X X X X г) в) Рис. 4. Квадраты вершин многоугольника Lпар и область Rпар на разных этапах выбора точек слоя 0. х – с ранее заданными точками. Квадраты, принадлежащие Rпар, заштрихованы, причем более темные – это квадраты вершин многоугольника Lпар. Легко убедиться, что P потенциально может соединяться ребрами триангуляции Делоне с 19 точками для случая на рис. 4а, с 32 точками – на рис. 4б и с 40 точками – на рис. 4в, а в случае на рис. 4г область Rпар (и количество ребер) может только уменьшиться. Отметим, что приведенные значения получены для случая произвольного расположения точек внутри квадратов, а при любом фиксированном размещении точек область Rпар будет существенно меньше. При локализации P проверяются только треугольники, имеющие общие точки с отрезком OP, т.е. треугольники, ребра которых пересекают OP, либо инцидентны O. Построим 2 многоугольника Lлок1 и Lлок2, для которых выполняются следующие условия: • квадраты O и P целиком находятся внутри как Lлок1, так и Lлок2; • если AB – ребро, а C – вершина Lлок1, то C лежит вне окружности, построенной по A и B, или A и B расположены на одной границе сетки квадратов; А.Л. Фукс 54 • если AB – ребро Lлок2, то O, P и все квадраты между ними лежат вне окружности, построенной по A и B, или A и B расположены на одной границе сетки квадратов. Определим многоугольную область Rлок как объединение областей, ограниченных Lлок1, Lлок2, и множества квадратов, лежащих внутри какой-либо из окружностей, построенных по квадратам смежных вершин Lлок1 и Lлок2. Пример выделения Rлок для P Y-граничной точки P слоя 0 приведен на рис. 5: все квадраты Rлок заштрихованы, причем квадраты O вершин Lлок1 – самые темные, а Lлок2 – светлее. Если точка C находится вне Rлок, а D – это любая точка из Rлок, и отрезок CD имеет общие точки с квадратами O, P или лежащими между ними, то обязательно найдется такое пересекающее CD ребро AB многоугольника Lлок1 или Lлок2, что C и D лежат Рис. 5. Квадраты вершин вне окружности, построенной по A и B. Поэтому многоугольников Lлок1 и CD не может быть ребром триангуляции Делоне, и Lлок2 и область Rлок. при локализации P могут проверяться только треугольники, ребра которых соединяют точки из Rлок. Количество таких треугольников (как и число точек в Rлок на любом этапе сгущения) будет ограничено некоторой константой. X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X Пусть теперь новая точка P лежит на границе сетки квадратов. Для нее может не существовать многоугольника Lпар, содержащего внутри себя P. В этом случае гарантированно «отделить» P от остальных точек может незамкнутая ломаная Lпар, которая строится аналогично многоугольнику, но содержит также все точки, лежащие на той же границе сетки квадратов, что и P. Область Rпар определяется так же, как и для многоугольника. На рис. 6 приведен пример построения Rпар для точки P слоя 0: квадраты вершин Lпар выделены темной штриховкой, остальные квадраты Rпар – более светлой. Количество точек из Rпар, с которыми P может соединяться ребрами триангуляции Делоне, имеет тот же порядок O ( n ) , что и число точек на границе сетки квадратов, поэтому общее число проверок, проводимых при триангуляции всех точек на границе, не превышает O (n ) . X Чтобы промоделировать обработку точек слоя 1, нужно на рис. 4б условно разделить каждый квадрат на 9 равных и считать, что все заданные точки лежат в центральном квадрате для каждой девятки. Это полностью аналогично простому введению ограничений на расположение точек слоя 0 внутри квадратов, поэто- X X X X X X X X X X X X X X X X X X X X X X X X X X X X O X X X X X X X X X X X X X P X X X X X Рис. 6. Область Rпар и вершины многоугольника Lпар на границе сетки квадратов. Предварительная обработка точек при построении триангуляции Делоне 55 му может привести только к уменьшению числа точек, попадающих в Rпар и Rлок. Очевидно, что то же будет справедливо и для любого слоя i<k. Число точек слоя k равно 2 abs( kx −ky ) +1 + 2 =const, поэтому и триангуляция точек слоя k требует не более фиксированного числа проверок. Теорема доказана. Ослабим ограничения на входные данные и модифицируем процесс сгущения слоев так, чтобы он стал более пригодным для практического использования, а алгоритм триангуляции остался линейным по трудоемкости: 1. Пусть в каждом квадрате находится не менее двух и не более m=const точек. При сгущении слоев из каждого квадрата выбирается только одна (любая) точка, а затем последовательно просматриваются все квадраты (переход только к смежному) и выбираются все оставшиеся точки. Размеры областей Rлок и Rпар для данных точек будут такими же, как для точек слоя 0. Количество точек в Rлок и Rпар и связанное с ним число проверок при локализации и перестроении треугольников не более чем в m раз превышает аналогичные величины для точек слоя 0. 2. Если область определения не удается разделить на нужное число квадратов, то можно ввести регулярную систему из такого же количества одинаковых по размерам элементарных прямоугольников и по аналогичным правилам определять области Rлок и Rпар. При разумном выборе формы прямоугольника, т.е. в случае, когда отношение длин большей и меньшей его сторон не больше некоторого фиксированного (небольшого) значения, количество принадлежащих Rлок и Rпар прямоугольников также не будет превышать некоторой константы. 3. Практическая реализация алгоритмов предобработки и триангуляции Для произвольного набора исходных точек даже последние ограничения являются слишком сильными: из-за неравномерности размещения точек в любой регулярной системе могут встречаться прямоугольники, как содержащие слишком много точек, так и пустые. Чтобы процесс сгущения не нарушался, а точки распределялись по прямоугольникам по возможности равномерно, придется варьировать размеры прямоугольников, сохраняя необходимое их количество и нумерацию по координатам X и Y . При этом увеличение числа слоев в общем случае делает систему прямоугольников все более отличной от регулярной, а уменьшение числа слоев увеличивает m (максимальное число точек в прямоугольнике). В обоих случаях это приводит к увеличению числа проверок при триангуляции, однако этот процесс практически не поддается аналитическому исследованию, поэтому вопрос выбора наилучшего с точки зрения общей временной сложности значения m требует экспериментальной проверки. 56 А.Л. Фукс Формирование системы прямоугольников, по возможности близкой к регулярной, можно проводить с помощью модифицированного алгоритма построения двумерного бинарного дерева поиска [2]. Однако трудоемкость этого алгоритма составляет O ( n ⋅ log n ) , поэтому используем более быстрый. По числу n исходных точек, относительным размерам области определения и требуемому m рассчитаем значения 2 kx + 1 и 2 ky + 1 . Косвенно отсортируем все точки по координате X и разделим область определения на 2 kx + 1 полос по X так, чтобы числа точек в любой пары полос отличались не более чем на 1. Аналогично обрабатываем все полосы: сортируем точки (в полосе) по Y и делим полосу на 2 ky + 1 элементарных прямоугольников. Отметим, что в нашей задаче не требуется высокой точности сортировки вещественных значений, поэтому нужно переходить от исходных к целочисленным координатам в диапазоне от 0 до 65535 и использовать линейную по трудоемкости цифровую сортировку двухбайтовых целых чисел без знака. При сгущении слоев и последующей обработке оставшихся точек каждая точка выбирается ровно 1 раз, поэтому в целом алгоритм предобработки имеет линейную трудоемкость. Предобработка нужна для уменьшения числа проверок во время локализации точек и перестроения треугольников. Проверки состоят в основном из операций типа вычисления скалярных и векторных произведений (точнее, их модулей со знаком). Эти операции будем далее считать элементарными шагами при оценке трудоемкости. При локализации нужно установить, попадает ли точка в выбранный треугольник и, если нет, то в каком из соседних нужно продолжить поиск. Если перестроение треугольников организовано так, что порядок следования вершин всегда соответствует обходу треугольника против часовой стрелки (или всегда по часовой стрелке), то в лучшем из предложенных в [4] методов потребуется вычислять всего 1-3 векторных произведения на каждый проверяемый треугольник. Проверка Делоне позволяет установить, являются ли новый треугольник ABP и смежный с ним ACB треугольниками Делоне или их нужно заменить на два новых треугольника ACP и CBP. Проверка положения C относительно окружности, проведенной через A,B и P, или выбор пары треугольников с большим минимальным углом требуют свыше 10 элементарных шагов. Мы предлагаем менее сложную проверку. Пусть по точкам A,B и P построена окружность. Если C лежит точно на этой окружности или вне ее, то сумма углов APB + ACB ≤ 180 градусов и треугольники изменять не надо (рис. 7а и 7б). Если C внутри, то APB+ACB>180, т.е. sin(APB+ACB)<0, и требуется перестроение (рис. 7в). Предварительная обработка точек при построении триангуляции Делоне P P B A P B A 57 B A C C а) C б) в) Рис. 7. Проверка условия Делоне и перестроение треугольников. Но sin( APB + ACB ) = sin APB ⋅ cos ACB + cos APB ⋅ sin ACB , а значения двух синусов и двух косинусов можно получить из скалярных и векторных (их Z-координат) произведений векторов PA, PB и CB ,CA . Скалярные произведения дают величины s1 = PA ⋅ PB ⋅ cos APB и s2 = CA ⋅ CB ⋅ cos ACB . Если s1<0 и s2<0, то APB>90 и ACB>90 и необходимо перестроение. При s1 ≥ 0 и s2 ≥ 0 перестроения не требуется. В остальных случаях вычисляются v1 = PA ⋅ PB × × sin APB , v2 = CA ⋅ CB ⋅ sin ACB и v1 ⋅ s2 + s1 ⋅ v2 = PA ⋅ PB ⋅ CA ⋅ CB ⋅ sin( APB + + ACB ) , после чего достаточно проверить знак последней величины. Таким образом, для проверки пары треугольников требуется 2 или 5 элементарных шагов. 4. Вычислительный эксперимент Исследование работы итеративного алгоритма триангуляции Делоне после предварительной обработки набора точек проводилось путем статистического моделирования. Триангуляции строились по случайным наборам n точек, независимо распределенных в единичном квадрате по следующим четырем видам распределений: 1) по равномерному распределению; 2) по треугольному распределению с максимумом плотности в левом нижнем углу квадрата; 3) по полинормальному, являющемуся суммой из 50 круговых нормальных, центры которых равномерно и независимо распределены в единичном квадрате, а среднеквадратичные отклонения равны 0.1, причем точки, выходящие за пределы квадрата, не учитывались; А.Л. Фукс 58 4) по равномерному на отрезках, генерируемому следующим образом: концы отрезков соединяют 2 n равномерно и независимо распределенных в квадрате вспомогательных точек, исходные точки генерируются внутри отрезков по равномерному распределению, причем вероятность попадания точки в конкретный отрезок пропорциональна его длине. На рис. 8-10 приведены усредненные результаты моделирования по 100 наборам точек для каждого распределения, представляющие зависимость трудоемкости триангуляции от максимального количества точек в прямоугольной ячейке m или от числа исходных точек n. Трудоемкость определялась не временем, а количеством элементарных шагов (векторных или скалярных произведений) на одну точку. По условиям метода сгущения слоев общее число прямоугольных ячеек может изменяться только скачком (приблизительно в 2 раза), поэтому и моделирование проводилось для m=2,4,8,16,32,64,128,256. Количество точек n также менялось в широком диапазоне (от 6250 до 400000 с увеличением в 2 раза на каждом шаге), поэтому на всех графиках используется логарифмический масштаб по оси абсцисс. На рис. 8 показана зависимость трудоемкости от m при n=100000 для всех распределений: равномерного (1), треугольного (2), полинормального (3) и равномерного на отрезках (4). 4 Трудоемкость (элементарных шагов на точку) 2 0 4 8 6 4 2 0 3 2 1 8 6 4 2 4 8 16 32 64 128 256 Число точек на прямоугольник m Рис. 8. Зависимость трудоемкости от m для 4 распределений при n=100000. Предварительная обработка точек при построении триангуляции Делоне 56 59 Трудоемкость (элементарных шагов на точку) 6 54 52 5 50 48 4 46 44 3 42 2 40 1 38 36 34 2 4 8 16 32 64 128 256 Число точек на прямоугольник m Рис. 9. Зависимость трудоемкости m для равномерного и равномерного на отрезках распределений ( n=25000,100000, 400000) 44 Трудоемкость (элементарных шагов на точку) 42 4 40 38 3 36 2 1 34 6250 12500 25000 50000 100000 200000 400000 Общее число точек n Рис. 10. Зависимость трудоемкости (элементарных шагов на точку) от общего числа точек n для 4 распределений при m=16. На рис. 9 показана зависимость трудоемкости от m при трех различных n для двух распределений: равномерного (n=25000 (1), 100000 (2), 400000 (3)) и равномерного на отрезках (n=25000 (4), 100000 (5), 400000 (6)). Из приведенных результатов следует, что минимальные значения трудоемкости для всех 4 распределений достигаются на отрезке 8 ≤ m ≤ 16 . При m<8 А.Л. Фукс 60 из-за нерегулярности системы прямоугольных ячеек резко возрастает трудоемкость локализации точки, а увеличение m приводит к плавному росту числа элементарных шагов как при локализации, так и при перестроении треугольников. На рис. 10 показана зависимость трудоемкости от n при m=16 для всех четырех распределений: равномерного (1), треугольного (2), полинормального (3) и равномерного на отрезках (4). Приведенные результаты показывают, что после предварительной обработки точек трудоемкость триангуляции Делоне для всех четырех распределений является практически линейной. Трудоемкость самой предобработки гарантированно линейна, и, как показали результаты вычислительного эксперимента, время предобработки приблизительно в 7 раз меньше времени последующей триангуляции. Среднее общее время предобработки и триангуляции 100000 точек при m=16 на Pentium-166 MMX для 4 распределений составляет соответственно 3,32, 3,34, 3,53 и 3,74 с. ЛИТЕРАТУРА 1. Lawson C. Software for C1 surface interpolation // Mathematical Software, 1977, No. 3, p. 161-194. 2. Препарата Ф., Шеймос М. Вычислительная геометрия: Введение / Пер. с англ. – М.: Мир, 1989. – 478 с. 3. Lee D.,Schachter B. Two algorithms for constructing a Delaunay triangulation // Int.Jour.Comp. and Inf.Sci., 1980, Vol. 9, No. 3, p. 219-242. 4. Скворцов А.В., Костюк Ю.Л. Эффективные алгоритмы построения триангуляции Делоне // Наст. книга, с. 22-47.