Представления триангуляции

2D и 3-D Области

Триангуляции часто используются, чтобы представлять 2D и 3-D геометрические области в областях применения, таких как компьютерная графика, физическое моделирование, географические информационные системы, медицинская обработка изображений и т.д. Полигон карты показан здесь

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

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

Точно так же можно представлять контур 3-D геометрической области с помощью триангуляции. Фигура ниже показов выпуклая оболочка набора точек на 3-D пробеле. Каждый фасет оболочки является треугольником.

Матричный формат триангуляции

MATLAB® использует матричный формат, чтобы представлять триангуляции. Этот формат имеет две части:

  • Вершины, представленные как матрица, в которой каждая строка содержит координаты точки в триангуляции.

  • Возможность соединения триангуляции, представленная как матрица, в которой каждая строка задает треугольник или tetrahedon.

Эти данные показывают простую 2D триангуляцию.

Следующая таблица показывает информацию о вершине.

Вершины
ID вершиныx-y-
V12.58.0
V26.58.0
V32.55.0
V46.55.0
V51.06.5
V68.06.5

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

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

Возможность соединения
Треугольный IDИдентификаторы ограничения вершин
T1 531
T2 321
T3342
T4462

Данные в этой таблице хранятся как матрица в среде MATLAB. Треугольные идентификаторы являются метками, используемыми для идентификации определенных треугольников. Они, как показывают, иллюстрируют концепцию треугольного ID, но они не хранятся явным образом. Вместо этого номера строк матрицы служат треугольными идентификаторами.

Вы видите, что треугольный T1 задан тремя вершинами, {V5, V3, V1}. Точно так же T4 задан вершинами, {V4, V6, V2}. Этот формат расширяет естественно к более высоким размерностям, которые требуют дополнительных столбцов данных. Например, четырехгранник на 3-D пробеле задан четырьмя вершинами, каждая из которых имеют три координаты, (x, y, z).

Можно представлять и запросить следующие типы использования триангуляций MATLAB:

  • 2D триангуляции, состоящие из треугольников, ограниченных вершинами и ребрами

  • 3-D поверхностные триангуляции, состоящие из треугольников, ограниченных вершинами и ребрами

  • 3-D триангуляции, состоящие из тетраэдров, ограниченных вершинами, ребрами и поверхностями

Запрос Триангуляций Используя Класс триангуляции

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

Например, вы можете вычислить треугольные центры вписанной окружности прежде, чем построить аннотируемую триангуляцию, показанную ниже. В этом случае вы используете центры вписанной окружности, чтобы отобразить треугольные метки (T1, T2, и т.д.) в каждом треугольнике. Если вы хотите построить контур красного цвета, необходимо определить ребра, на которые ссылается только один треугольник.

Класс триангуляции

Можно использовать triangulation, чтобы создать представление в оперативной памяти любых 2D или 3-D данных о триангуляции, которые находятся в матричном формате, таком как матричный вывод от функции delaunay или других программных инструментов. Когда ваши данные представлены с помощью triangulation, можно выполнить топологические и геометрические запросы, которые можно использовать, чтобы разработать геометрические алгоритмы. Например, можно прилагается треугольники или тетраэдры к вершине, те, которые совместно используют ребро, их центры описанной окружности и другие функции.

Можно создать triangulation одним из двух способов:

  • Передайте существующие данные, которые вы имеете в матричном формате к triangulation. Этими данными может быть вывод от функции MATLAB, такой как delaunay или convhull. Также можно импортировать данные о триангуляции, которые были созданы другим программным обеспечением. Когда вы работаете с импортированными данными, быть уверенными ссылки на данные возможности соединения массив вершины, использующий индексацию на основе 1 вместо индексации на основе 0.

  • Передайте набор точек к delaunayTriangulation. Получившаяся Триангуляция Делоне является специальным видом triangulation. Это означает, что можно выполнить любой запрос triangulation на данных, а также любой Delaunay-специфичный запрос. В более формальных терминах языка MATLAB delaunayTriangulation является подклассом triangulation.

Создание триангуляции от Матричных Данных

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

Создайте матрицу, P, который содержит данные о вершине.

P = [ 2.5    8.0
      6.5    8.0
      2.5    5.0
      6.5    5.0
      1.0    6.5
      8.0    6.5];

Задайте возможность соединения, T.

T = [5  3  1;
     3  2  1;
     3  4  2;
     4  6  2];

Создайте triangulation из этих данных.

TR = triangulation(T,P)
TR = 
  triangulation with properties:

              Points: [6x2 double]
    ConnectivityList: [4x3 double]

Доступ к свойствам в triangulation таким же образом вы получаете доступ к полям struct. Например, исследуйте свойство Points, которое содержит координаты вершин.

TR.Points
ans = 6×2

    2.5000    8.0000
    6.5000    8.0000
    2.5000    5.0000
    6.5000    5.0000
    1.0000    6.5000
    8.0000    6.5000

Затем, исследуйте возможность соединения.

TR.ConnectivityList
ans = 4×3

     5     3     1
     3     2     1
     3     4     2
     4     6     2

Свойства Points и ConnectivityList задают матричные данные для триангуляции.

Класс triangulation является оберткой вокруг матричных данных. Реальная выгода является полноценностью методов класса triangulation. Методы похожи на функции, которые принимают triangulation и другие соответствующие входные данные.

Класс triangulation обеспечивает простой способ индексировать в матрицу свойства ConnectivityList. Доступ к первому треугольнику в триангуляции.

TR.ConnectivityList(1,:)
ans = 1×3

     5     3     1

Другим способом получить первый треугольник является TR(1,:).

Исследуйте первую вершину первого треугольника.

TR(1,1)
ans = 5

Исследуйте вторую вершину первого треугольника.

TR(1,2)
ans = 3

Теперь, исследуйте все треугольники в триангуляции.

TR(:,:)
ans = 4×3

     5     3     1
     3     2     1
     3     4     2
     4     6     2

Используйте triplot, чтобы построить triangulation. Функция triplot не является методом triangulation, но она принимает и может построить triangulation.

figure
triplot(TR)
axis equal

Используйте метод triangulation, freeBoundary, чтобы запросить свободный контур и подсветить его в графике. Этот метод возвращает ребра триангуляции, которые совместно используются только одним треугольником. Возвращенные ребра выражаются с точки зрения идентификаторов вершины.

boundaryedges = freeBoundary(TR)';

Теперь постройте граничные ребра как красную линию.

hold on 
plot(P(boundaryedges,1),P(boundaryedges,2),'-r','LineWidth',2)
hold off

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

Создание триангуляции Используя delaunayTriangulation

Этот пример показывает, как создать Триангуляцию Делоне с помощью delaunayTriangulation.

Когда вы создаете Триангуляцию Делоне с помощью класса delaunayTriangulation, вы автоматически получаете доступ к методам triangulation, потому что delaunayTriangulation является подклассом triangulation.

Создайте delaunayTriangulation из набора точек.

P = [ 2.5    8.0
      6.5    8.0
      2.5    5.0
      6.5    5.0
      1.0    6.5
      8.0    6.5];

DT = delaunayTriangulation(P)
DT = 
  delaunayTriangulation with properties:

              Points: [6x2 double]
    ConnectivityList: [4x3 double]
         Constraints: []

Получившийся объект delaunayTriangulation имеет свойства, Points и ConnectivityList, точно так же, как объект triangulation.

Можно получить доступ к триангуляции, использующей прямую индексацию, точно так же, как triangulation. Например, исследуйте возможность соединения первого треугольника.

DT(1,:)
ans = 1×3

     5     3     1

Затем, исследуйте возможность соединения целой триангуляции.

DT(:,:)
ans = 4×3

     5     3     1
     3     4     1
     1     4     2
     4     6     2

Используйте функцию triplot, чтобы построить триангуляцию.

triplot(DT)
axis equal

Родительский класс, triangulation, предоставляет метод incenter, чтобы вычислить центры вписанной окружности каждого треугольника.

IC = incenter(DT)
IC = 4×2

    1.8787    6.5000
    3.5000    6.0000
    5.5000    7.0000
    7.1213    6.5000

Возвращенное значение, IC, является массивом координат, представляющих центры вписанной окружности треугольников.

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

hold on
numtri = size(DT,1);
trilabels = arrayfun(@(P) {sprintf('T%d', P)}, (1:numtri)');
Htl = text(IC(:,1),IC(:,2),trilabels,'FontWeight','bold', ...
'HorizontalAlignment','center','Color','blue');
hold off

Вместо того, чтобы создать Триангуляцию Делоне с помощью delaunayTriangulation, вы могли использовать функцию delaunay, чтобы создать данные о возможности соединения триангуляции, и затем передать данные о возможности соединения triangulation. Например,

P = [ 2.5    8.0
      6.5    8.0
      2.5    5.0
      6.5    5.0
      1.0    6.5
      8.0    6.5];

T = delaunay(P);
TR = triangulation(T,P);
IC = incenter(TR);

Оба подхода допустимы в этом примере, но если вы хотите создать Триангуляцию Делоне и выполнить запросы на нем, затем необходимо использовать delaunayTriangulation по этим причинам:

  • Класс delaunayTriangulation обеспечивает дополнительные методы, которые полезны для работы с триангуляциями. Например, вы можете, чтобы выполнить ближайшего соседа и поисковые запросы точки в треугольнике.

  • Это позволяет вам редактировать триангуляцию, чтобы добавить, переместить, или удалить точки.

  • Это позволяет вам создавать ограниченные Триангуляции Делоне. Это позволяет вам создавать триангуляцию для 2D области.

Смотрите также

| | | |

Похожие темы