Научная статья на тему 'Об алгоритме перечисления триангуляций'

Об алгоритме перечисления триангуляций Текст научной статьи по специальности «Математика»

CC BY
148
46
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ТРИАНГУЛЯЦИЯ / ТЕТРАЭДР / СИМПЛЕКС / ЧИСЛО ТРИАНГУЛЯЦИЙ / ВЫПУКЛАЯ ОБОЛОЧКА / TRIANGULATION / TETRAHEDRON / SIMPLEX / NUMBER OF TRIANGULATIONS / CONVEX HULL

Аннотация научной статьи по математике, автор научной работы — Попов Владимир Валентинович

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

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

ON ALGORITHM OF NUMBERING OF TRIANGULATIONS

Abstract. In [1] the algorithm of numbering of all triangulations of a finite set on the plane is offered. This paper describes the modification of this algoritm for subset of points in three-dimensional space. Let ?? = {??1, ??2,..., ????} is a finite set of points in three-dimensional space. The triangulation of this set is such a sequence ??1, ??2,..., ???? of tetrahedrons with vertexs from ??, which union is equal to convex hull conv(??) of ??, and the intersection ???? ? ????, ?? ?= ?? is or empty, or is the common vertex or the common edge or the common face of tetrahedrons ???? and ????, and each point ???? is the vertex of some ????. At first, the algorithm ?? is described, which gives us the list of all triangulations on ??, containing some tetrahedron ??1 with vertexs from a set of ?? without points from ?? other than his vertexs. Let at some ?? the list of tetrahedrons be already defined ??1, ??2,..., ???? which can be completed to some triangulations for ??, but the union ?? = ??1 ? ??2 ?... ? ???????? is not equal to conv(P). Then there will be such two-dimensional face ?? a set ?? and such tetrahedron of ?? with vertexs from ?? which doesn't contain points of a set ?? other than his vertexs, and ?? ? ?? = ??. Among tetrahedrons ??, which can be constructed by this way, we choise such ??, that the sequence (??1, ??2, ??3, ??4) of numbers of his vertex has a minimum value with respect to lexicographic order. Now we put ????+1 = ??. After some such a steps we get a triangulation of ??. To build other triangulations it is necessary to delete tetrahedrons with big numbers and add new tetrahedrons before receiving new triangulations. Let ?? be a boundary of the set conv(??). We assume that ?? ? ?? = = {??1, ??2,..., ????}, where ?? ? 3. and segment [??1, ??2] doesn't contains some points from ?? other than ??1 and ??2. Let 2 < ??3 ? ?? < ??4 and ?? is the tetrahedrons with vertexes ??1, ??2,????3,????4, which does not containes the points from ?? other than his vertexs. Applying algorithm ?? to ??, we obtain some triangulations of a set ??. Changing ??3, ??4, we get all the triangulations. By this way we realies algorithm ??. Algorithms ?? and ? allows us to receive, for example, the following results: (1) Let ?? is the set of vertexs of a cube. Then the number of triangulations of ?? is equall 74. (2) Let ??? = ?? ?{??}, where ?? is the point of the edge of cube. Then ??? has 276 triangulations.

Текст научной работы на тему «Об алгоритме перечисления триангуляций»

УДК 517.518.85+517.27 ББК 22.144

ОБ АЛГОРИТМЕ ПЕРЕЧИСЛЕНИЯ ТРИАНГУЛЯЦИЙ

Попов Владимир Валентинович

Кандидат физико-математических наук, доцент кафедры компьютерных наук и экспериментальной математики, Волгоградский государственный университет popov_v_v@rambler.ru, knem03@mail.ru, kiem@volsu.ru просп. Университетский, 100, 400062 г. Волгоград, Российская Федерация

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

Ключевые слова: триангуляция, тетраэдр, симплекс, число триангуляций, выпуклая оболочка.

Вопросам построения триангуляций посвящена обширная литература (см., например, [2;3]). В работе [1] предложен алгоритм построения всех триангуляций конечного множества на плоскости. В данной работе приводится модификация алгоритма для наборов точек трехмерного пространства.

Пусть Р = {р\,р2,... ,рм} — конечный набор точек в трехмерном пространстве. Необходимо перечислить все триангуляции этого набора. Под триангуляцией набора точек Р понимается такой набор тетраэдров 51, Б2, ..., , для которого выполнены следующие условия:

(1) Каждая точка Рг € Р является вершиной хотя бы одного из тетраэдров 8^.

(2) Вершины любого тетраэдра 8^ лежат во множестве Р.

(3) Если г = ], то пересечение 8^ П 8^ или пусто, или является общей вершиной, или общим ребром, или общей гранью тетраэдров Si и 8^.

(4) Объединение тетраэдров Б2, ..., совпадает с выпуклой оболочкой еопу(Р) множества Р.

Под тетраэдром понимается выпуклая оболочка четырех точек (вершин тетраэдра), не лежащих в одной плоскости трехмерного пространства. Считаем, что точки множества Р не лежат в одной плоскости — иначе триангуляций этого множества не существует.

14 На множестве упорядоченных четверок целых чисел будем рассматривать лексико-

20графический порядок:

03

03

т

о

° ^ъМэ^ < (3ъ32,3з,к)

©

1\ < или Ч = 31,12 < 32 или Ч = 31,12 = 32,4 < 33 или Ч = 31, ¿2 = 32, Ч = 33, Ч < 34.

Через Б(ц,г2,г3,г4) будем обозначать тетраэдр Б, вершинами которого являются точки Р с номерами г\, г2, г3 и г4. Таким образом, вершины Б — это точки р^, р¿2, рг3 и р14 множества Р.

Будем говорить, что тетраэдр Б совместим с тетраэдром Б', если эти тетраэдры или не имеют общих точек, или же пересекаются по общей вершине, или по общему ребру, или по общей грани.

Сначала рассмотрим вспомогательный алгоритм Л, который перечисляет все триангуляции, содержащие заданный тетраэдр.

1. Алгоритм Л

Пусть задан тетраэдр ^ с вершинами из множества Р, не содержащий точек из Р, отличных от своих вершин. Опишем алгоритм Л, который перечисляет все триангуляции Р, содержащие этот тетраэдр. На каждом шаге алгоритма будет определено число к построенных к данному моменту тетраэдров, а также два списка:

1) Список £ построенных тетраэдров Б\, Б2, ..., Бк. Каждый тетраэдр представлен в этом списке упорядоченной четверкой чисел (н,г2, г3,ч), состоящей из номеров вершин этого тетраэдра.

2) Список Т граней тетраэдров из списка £. Каждая грань представлена упорядоченной тройкой (^1,д2,д3), состоящей из номеров вершин этой грани.

В список Т помещаются такие грани, к которым в дальнейшем могут приклеиваться другие тетраэдры. Эти грани называются граничными. Если к граничной грани приклеивается тетраэдр, то грань становится внутренней. После удаления приклеенного тетраэдра грань снова становится граничной. В начале работы алгоритма списки £ и Т пусты.

Пусть вершинами тетраэдра 5 являются точки р^, р¿2, рг3 и р¿4, то есть Б\ = = Б(ч,г2,г3,г4). Алгоритм Л состоит из следующих шагов:

(1) Полагаем к = 1.

(2) Помещаем тетраэдр ^ в список £ (в качестве единственного элемента). Этот тетраэдр будет представлен в списке упорядоченной четверкой чисел (г\,г2,г3,г4).

(3) Упорядоченные грани (н,12,13), (ч,г2,г4), (г\,г3,г4) и (г2,г3,г4) тетраэдра Б\ помещаем в список Т и объявляем все эти грани граничными.

(4) Просматривая список Т и давая переменной з значения 1, 2,...,М, пытаемся найти такую граничную грань (д\,д2,д3) & Т и такое число з, 1 < з < N, что тетраэдр Б = Б(д\,д2,д3,3) не содержит точек из Р, отличных от своих вершин, и совместим с каждым из тетраэдров списка £. Если нужной четверки чисел (^,д2,д3,3) не найдено, то идем к пункту (6). Если же такая четверка есть, то переходим на пункт (5).

(5) Среди упорядоченных четверок чисел (^,д2,д3,3), удовлетворяющих условиям пункта (4), находим минимальную четверку (ц0,ц20,ц0,30) (в смысле лексикографического порядка). За тетраэдр Бк+\ принимаем 5(ср2,д20,д°,з2). Далее осуществляем следующие действия:

тетраэдр Бк+\ (то есть четверку чисел (д2,д20,д3,32)) помещаем в конец списка £;

(Ь) три грани (д°,д2,з2), ((¡2,д30,32) и (сЮл2,]2) тетраэдра Бк+1 помещаем в конец списка Т. Объявляем эти грани граничными;

(c) грань (q0,q0,q0) тетраэдра Sk+1 (находящуюся в списке Т) объявляем внутренней и запоминаем, что она была использована при построении тетраэдра Sk+i;

(d) увеличиваем к на 1;

(e) идем к пункту (4).

(6) Построена очередная триангуляция. Запоминаем данные об этой триангуляции. Счетчик числа триангуляций увеличиваем на 1.

(7) Из конца списка £ удаляем тетраэдр Sk, а из конца списка Т удаляем три грани тетраэдра Sk. Просматривая получившийся список Т, находим четвертую грань тетраэдра Sk и объявляем ее граничной.

(8) Уменьшаем к на 1.

(9) Пусть тетраэдр Sk представлен в списке £ упорядоченной четверкой чисел (ч,ъ2,ъ3,ч). Давая переменной j значения i4 + 1,i4 + 2, . . . , N, пытаемся найти такое число j, что i4 < j < N, а тетраэдр S = S(ii,i2,i3,j), не содержащий точек из Р, отличных от своих вершин, и совместим с каждым из тетраэдров Si, S2, ..., Sk-i из списка £.

Если число j с указанным свойством найдено, то идем к пункту (10). Если нужное j не найдено, то при к > 2 идем к пункту (7), а при к = 2 идем к пункту (12).

(10) Полагаем Sk = S = S(ii,i2,i3,j), для чего в списке £ последнюю четверку (ii,i2,i3,i4) заменяем четверкой (ii,i2,i3,j). Кроме того, заменяем в списке Т последние три грани (старого) тетраэдра Sk гранями (ii,i2,j), (i1,i3,j) и (i2,i3,j) (нового) тетраэдра Sk = S = S(i1 ,i2,i3,j) и объявляем все эти грани граничными.

(11) Идем к пункту (4).

(12) Конец работы.

2. Алгоритм В

Пусть Р = {р1,р2,... ,Pn} — конечный набор точек в трехмерном пространстве. Алгоритм В перечисляет все триангуляции этого набора. Если все точки лежат в одной плоскости, то триангуляций нет. Пусть теперь выпуклая оболочка conv(P) множества Р — многогранник. Не теряя общности, считаем, что несколько первых вершин Р (а именно — вершины р1, р2, ..., pkv и только они) лежат в одной грани G этого многогранника, а отрезок [р1,р2] является ребром этой грани (или лежит на ребре) и не содержит точек из Р, отличных от р1 и р2.

Пусть Т — произвольная триангуляция множества Р. Тогда найдется (и единственен) входящий в эту триангуляцию тетраэдр S1, одна из граней которого лежит в G, а р1 и р2 являются вершинами этой грани. Ясно, что S1 имеет вид S(1, 2,i3,i4), где 2 < г3 < kv и kv < г4 < п. Алгоритм В состоит из следующих шагов:

(1) Полагаем г3 = 3.

(2) Полагаем i4 = kv + 1.

(3) Если тетраэдр S = S(1, 2, i3,i4) содержит точки из набора Р, отличные от своих вершин, то идем к пункту (5).

(4) Полагаем S1 = S и с помощью алгоритма Л перечисляем все триангуляции, содержащие тетраэдр S1.

(5) Увеличиваем на 1. Если < N, то идем к пункту (3).

(6) Увеличиваем г3 на 1. Если г3 < кь, то идем к пункту (2).

(7) Конец.

Замечание 6. Если какая-либо грань тетраэдра ^ лежит на грани выпуклой оболочкой еопу(Р) множества Р, то при выполнении пункта (3) эту грань можно не заносить в список граничных граней, так как к ней нельзя будет в дальнейшем приклеить новый тетраэдр. Таким же образом можно поступать при выполнении подпункта (Ь) пункта (5). При этом, однако, надо будет запоминать номер того тетраэдра, гранью которого является грань, помещаемая в список Т.

Отметим также, что если в пункте (4) алгоритма Л не учитывать лексикографический порядок на множестве граней, то триангуляции могут повторяться.

Несложно убедиться, что алгоритм В перечисляет все триангуляции на Р. Проверим, что каждая триангуляция встретится ровно один раз. Пусть Т = 8\, Б2,..., Бк и Т' = , 8'2,..., — две триангуляции, построенные на различных шагах алгоритма В. Покажем, что эти триангуляции различны. Если к = I, то это очевидно. Поэтому в дальнейшем считаем, что к = I.

Допустим, что Яг = . По построению ^ = (1, 2,г3,г4) и = (1,2,г'3,г14) для некоторых 13,14,1'3,1,4.. При этом точки р\, р2, р¿3 и рц лежат в грани С выпуклой оболочки еопу(Р) множества Р, а отрезок [р\,р2] является ребром этой грани (или лежит на ребре). Кроме того, точки р\, р2, р¿3 являются вершинами тетраэдра 8\, а точки р\, р2, р^ — вершинами тетраэдра . Поэтому пересечение тетраэдров ^ и имеет внутренние точки и потому эти тетраэдры не могут входить в одну триангуляцию. Следовательно, Т = Т'.

Пусть теперь ^ = Б' и 82 = 5"2. Пусть 82 = ^1^2,43,3) и 82 = (д[^2,^3,3'), где (д!,д2, д3) и (д[ ,д'2,д'3) — граничные грани тетраэдра ^. Допустим, что эти грани различны. Тогда одна из них, например, первая, меньше второй (при лексикографическом порядке). Но тогда при построении триангуляции Т' в результате выполнения пунктов (4) и (5) алгоритма Л за 8'2 был бы принят тетраэдр 82 — противоречие. Поэтому (дг,д2,д3) и (д[,д'2,д'3) — одна и та же грань. При этом вершины р^ и р^ лежат по одну сторону от этой грани. Поэтому тетраэдры 82 и 8'2 пересекаются по многограннику и потому не могут входить в одну триангуляцию. Следовательно, Т = Т'. Продолжая подобные рассуждения, несложно убедиться, что Т = Т'.

Описанные алгоритмы несложно модифицировать так, чтобы они были применимы для конечных наборов точек Р из пространства И"-, п > 3. Для этого нужно вместо тетраэдров рассматривать симплексы размерности п.

Алгоритмы Л и В позволяют получить, например, следующие результаты:

(1) Пусть Р — набор вершин куба. Тогда число триангуляций равно 74.

(2) Пусть к вершинам куба добавлена точка на ребре куба. Тогда имеется 276 различных триангуляций.

(3) Пусть Р — набор вершин куба, к которому добавлен центр грани. Тогда число различных триангуляций равно 150.

(4) Если к вершинам куба добавить середины двух соседних ребер, то число три-ангуляций увеличится до 1016.

При получении очередной триангуляции можно провести анализ содержащихся в ней тетраэдров (при выполнении пункта (6) алгоритма Л). Пусть, например, а = а(Т) — наименьший из плоских углов тетраэдров, входящих в триангуляцию Т. Тогда в случае

(4) а > 15° для всех 1016 триангуляций, 15° < а < 16° для 356 триангуляций, 18° < < а < 19° для 612 триангуляций и а> 19° для 48 триангуляций. Автор признателен В.А. Клячину за полезные обсуждения.

СПИСОК ЛИТЕРАТУРЫ

1. Клячин, В. А. Метод цепей для организации хранения многомерных триангуляций / В. А. Клячин, В. В. Попов // Вестник Волгоградского государственного университета. Серия 1, Математика. Физика. — 2013. — № 2 (19). — C. 71-79.

2. Препарата, Ф. Вычислительная геометрия: Введение / Ф. Препарата, М. Шеймос. — М. : Мир, 1989. — 478 с.

3. Скворцов, А. В. Триангуляция Делоне и ее применение / А. В. Скворцов. — Томск : Изд-во Том. ун-та, 2002. — 128 с.

REFERENCES

1. Klyachin V.A., Popov V.V. Metod tsepey dlya organizatsii khraneniya mnogomernykh triangulyatsiy [Chanes Method For Storage of Multidimensional Triangulation]. Vеstnik Volgogradskogo gosudars^nnogo univеrsitеta. Sеriya 1, Matеmatika. Fizika [Science Journal of Volgograd State University. Mathematics. Phisics], 2013, no. 2 (19), pp. 71-79.

2. Preparata F., Sheymos M. Vychislitеlnaya gеomеtriya: Vvеdеniе [Computational Geometry. An Introduction]. Moscow, Mir Publ., 1989. 478 p.

3. Skvortsov A.V. Triangulyatsiya Dеlonе i ее primеnеniе [Delaunay Triangulation and its Application]. Tomsk, Izd-vo Tom. un-ta Publ., 2002. 128 p.

ON ALGORITHM OF NUMBERING OF TRIANGULATIONS

Popov Vladimir Valеntinovich

Candidate of Physical and Mathematical Sciences, Associate Professor, Department of Computer Sciences and Experimental Mathematics, Volgograd State University

popov_v_v@rambler.ru, knem03@mail.ru, kiem@volsu.ru Prosp. Universitetsky, 100, 400062 Volgograd, Russian Federation

Abstract. In [1] the algorithm of numbering of all triangulations of a finite set on the plane is offered. This paper describes the modification of this algoritm for subset of points in three-dimensional space.

Let P = {pi,p2,... ,Pn} is a finite set of points in three-dimensional space. The triangulation of this set is such a sequence Si, S2, ..., Sk of tetrahedrons with vertexs from P, which union is equal to convex hull conv(P) of P, and the intersection Si if Sj, i = j is or empty, or is the common vertex or the common edge or the common face of tetrahedrons Si and Sj, and each point pi is the vertex of some Sj.

At first, the algorithm A is described, which gives us the list of all triangulations on P, containing some tetrahedron Si with vertexs from a set of P without points from P other than his vertexs. Let at some k the list of tetrahedrons be already defined Si, S2, ..., Sk which can be completed to some triangulations for P, but the union V = Si U S2 U ... U ofSk is not equal to conv(P). Then there will be such two-dimensional face F a set V and such

tetrahedron of S with vertexs from P which doesn't contain points of a set P other than his vertexs, and V f S = F. Among tetrahedrons S, which can be constructed by this way, we choise such S, that the sequence (ii,i2,i3,i4) of numbers of his vertex has a minimum value with respect to lexicographic order. Now we put Sk+i = S. After some such a steps we get a triangulation of P. To build other triangulations it is necessary to delete tetrahedrons with big numbers and add new tetrahedrons before receiving new triangulations.

Let G be a boundary of the set conv(P). We assume that G f P = = {Pi,P2,... ,Pi}, where I > 3. and segment [p\,p2] doesn't contains some points from P other than pi and p2. Let 2 < i3 < I < i4 and S is the tetrahedrons with vertexes p\, p2,pi3,pi4, which does not containes the points from P other than his vertexs. Applying algorithm A to S, we obtain some triangulations of a set P. Changing i3, i4, we get all the triangulations. By this way we realies algorithm A

Algorithms A and B allows us to receive, for example, the following results:

(1) Let P is the set of vertexs of a cube. Then the number of triangulations of P is equall 74.

(2) Let P' = P U {p}, where p is the point of the edge of cube. Then P' has 276 triangulations.

Key words: triangulation, tetrahedron, simplex, number of triangulations, convex hull.

i Надоели баннеры? Вы всегда можете отключить рекламу.