alphaShape

Многоугольники и многогранники из точек в 2-D и 3-D

Описание

Система координат alphaShape создает ограничивающую область или объем, который окружает набор 2-D или 3-D точек. Вы можете манипулировать alphaShape объект, чтобы затянуть или ослабить подгонку вокруг точек, чтобы создать неконвексную область. Можно также добавить или удалить точки или подавить отверстия или области.

После создания alphaShape объект, можно выполнить геометрические запросы. Например, можно определить, находится ли точка внутри формы или можно найти число регионов, образующих форму. Можно также вычислить полезные величины, такие как площадь, периметр, площадь поверхности или объем, и построить график формы для визуального контроля.

Создание

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

Описание

пример

shp = alphaShape(x,y) создает 2-D альфа-форму точек (x,y) использование альфа-радиуса по умолчанию. Альфа-радиус по умолчанию создает самую плотную альфа-форму аппроксимации, которая окружает все точки.

shp представляет собой многоугольник. Многоугольник не имеет изолированных точек или ребер, и не имеет болтающихся ребер.

пример

shp = alphaShape(x,y,z) создает 3-D альфа-форму точек (x,y,z) использование альфа-радиуса по умолчанию.

shp представляет многогранник. Многогранник имеет ранее заявленные многоугольники, но он дополнительно не имеет изолированных граней или свисающих граней.

пример

shp = alphaShape(P) задает точки (x,y) или (x,y,z) в столбцах матрицы P.

пример

shp = alphaShape(___,a) создает альфа-форму с альфа-радиусом a использование любого из аргументов в предыдущих синтаксисах.

пример

shp = alphaShape(___,Name,Value) использует дополнительные опции, заданные одним или несколькими Name,Value аргументы в виде пар. Например, можно подавить внутренние отверстия или пустоты, используя 'HoleThreshold'.

Входные параметры

расширить все

x-координаты точек, заданные как вектор-столбец.

Типы данных: double

y-координаты точек, заданные как вектор-столбец.

Типы данных: double

z-координаты точек, заданные как вектор-столбец.

Типы данных: double

Координаты точки, заданные как матрица с двумя столбцами (для 2-D альфа-формы) или матрица с тремя столбцами (для 3-D альфа-формы).

  • Для 2-D, столбцы P представляют x и y координаты, соответственно.

  • Для 3-D, столбцы P представляют x, y, и z координаты, соответственно.

Типы данных: double

Альфа-радиус, заданный как неотрицательный скаляр. Альфа-радиус по умолчанию a = criticalAlpha(shp,'all-points'), который является наименьшим альфа-радиусом, который создает альфа-форму, которая окружает все точки.

Задайте a = criticalAlpha(shp,'one-region') использовать наименьший альфа-радиус, который создает альфа-форму только с одной областью.

Крайние значения a являются

  • Inf, где alphaShape производит выпуклую оболочку

  • 0, где alphaShape создает пустую альфа-форму

Типы данных: double

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: shp = alphaShape(...,'HoleThreshold',10)

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

  • Для 2-D, HoleThreshold задает максимальную площадь внутренних отверстий для заполнения.

  • Для 3-D, HoleThreshold задает максимальный объем внутренних пустот для заполнения. Отверстия, проходящие полностью через альфа-форму, не могут быть заполнены.

Когда вы задаете оба 'HoleThreshold' и a 'RegionThreshold'применение порогов зависит от порядка. alphaShape заполняет отверстия перед подавлением областей.

Типы данных: double

Максимальная площадь (2-D) или объем (3-D) областей для подавления, заданная как конечный, неотрицательный скаляр.

Когда вы задаете 'HoleThreshold' и a 'RegionThreshold'применение порогов зависит от порядка. alphaShape заполняет отверстия перед подавлением областей.

Типы данных: double

Свойства

расширить все

Координаты точек, заданные как матрица с двумя или тремя столбцами (для 2-D или 3-D наборов точек). Эти точки первоначально используются для создания альфа-формы, исключая дубликаты.

Типы данных: double

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

Альфа-радиус по умолчанию a = criticalAlpha(shp,'all-points'), который является наименьшим альфа-радиусом, который создает альфа-форму, окружающую все точки. Задайте a = criticalAlpha(shp,'one-region') использовать наименьший альфа-радиус, который создает альфа-форму только с одной областью.

Крайние значения Alpha иметь следующие условия:

  • Если Alpha является Inf, затем alphaShape формирует выпуклую оболочку.

  • Если Alpha является 0, затем получившееся alphaShape пуст.

Типы данных: double

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

  • Для 2-D, HoleThreshold задает максимальную площадь внутренних отверстий для заполнения.

  • Для 3-D, HoleThreshold задает максимальный объем внутренних пустот для заполнения. Отверстия, проходящие полностью через 3-D альфа-форму, не могут быть заполнены.

Значение по умолчанию 0, так что alphaShape не подавляет никаких отверстий или пустот. Применение HoleThreshold и RegionThreshold свойства зависят от порядка. alphaShape заполняет отверстия перед подавлением областей.

Типы данных: double

Максимальная площадь (2-D) или объем (3-D) областей для подавления, заданная как конечный неотрицательный скаляр.

Значение по умолчанию 0, так что alphaShape не подавляет никакие области. Применение HoleThreshold и RegionThreshold свойства зависят от порядка. alphaShape заполняет отверстия перед подавлением областей.

Типы данных: double

Функции объекта

alphaSpectrumЗначения Альфа, дающие различные альфа-формы
criticalAlphaАльфа-радиус, определяющий критический переход в форме
numRegionsЧисло регионов в альфа-форме
inShapeОпределите, находится ли точка внутри альфа-формы
alphaTriangulationТриангуляция, которая заполняет альфа-форму
boundaryFacetsКраевые грани альфа-формы
perimeterПериметр 2-D альфа-формы
areaПлощадь 2-D альфа-формы
surfaceAreaПлощадь поверхности 3-D альфа-формы
volumeОбъем 3-D альфа-формы
plotПостройте график альфа-формы
nearestNeighborОпределите ближайшую краевую точку альфа-формы

Примеры

свернуть все

Найдите форму 2-D облака точек данных.

Создайте и постройте график набора 2-D точек.

th = (pi/12:pi/12:2*pi)';
x1 = [reshape(cos(th)*(1:5), numel(cos(th)*(1:5)),1); 0];
y1 = [reshape(sin(th)*(1:5), numel(sin(th)*(1:5)),1); 0];
x = [x1; x1+15];
y = [y1; y1];
plot(x,y,'.')
axis equal

Figure contains an axes. The axes contains an object of type line.

Вычислите альфа-фигуру для набора точек с помощью альфа-радиуса по умолчанию.

shp = alphaShape(x,y);
plot(shp)

Figure contains an axes. The axes contains an object of type patch.

Проверьте значение альфа-радиуса по умолчанию.

shp.Alpha
ans = 0.7752

Альфа-радиус по умолчанию приводит к появлению альфа-формы с контуром. Чтобы лучше захватить контур набора точек, попробуйте большой альфа-радиус.

Вычислите альфа-форму с помощью альфа- значения 2,5.

shp.Alpha = 2.5;
plot(shp)

Figure contains an axes. The axes contains an object of type patch.

Найдите форму 3-D облака точек данных.

Создайте и постройте график набора 3-D точек.

[x1,y1,z1] = sphere(24);
x1 = x1(:);
y1 = y1(:);
z1 = z1(:);
x2 = x1+5;
P = [x1 y1 z1; x2 y1 z1];
P = unique(P,'rows');
plot3(P(:,1),P(:,2),P(:,3),'.')
axis equal
grid on

Figure contains an axes. The axes contains an object of type line.

Вычислите 3-D альфа-форму с помощью альфа-радиуса 1.

shp = alphaShape(P(:,1),P(:,2),P(:,3),1);
plot(shp)
axis equal

Figure contains an axes. The axes contains an object of type patch.

Создать альфа-форму можно путем определения ее альфа-радиуса и заполнения отверстий альфа-формой.

Создайте и постройте график 2-D набора точек.

th = (pi/12:pi/12:2*pi)';
x1 = [reshape(cos(th)*(2:5), numel(cos(th)*(2:5)),1);];
y1 = [reshape(sin(th)*(2:5), numel(sin(th)*(2:5)),1);];
x = [x1; x1+15;];
y = [y1; y1];
plot(x,y,'.')
axis equal

Figure contains an axes. The axes contains an object of type line.

Вычислите альфа-фигуру для набора точек, используя альфа-радиус 1.

shp = alphaShape(x,y,1);
plot(shp)

Figure contains an axes. The axes contains an object of type patch.

Альфа-радиус 1 приводит к альфа-форме с двумя областями, содержащими отверстия. Чтобы подавить небольшие отверстия в альфа-форме, можно задать HoleThreshold путем оценки площади самого большого отверстия для заливки. Чтобы заполнить все отверстия в форме, можно назначить произвольно большое значение HoleThreshold.

Создайте новую альфа-форму, которая подавляет отверстия путем задания HoleThreshold из 15.

shp = alphaShape(x,y,1,'HoleThreshold',15);
plot(shp)

Figure contains an axes. The axes contains an object of type patch.

Управляйте числом регионов альфа-формы путем установки порога области.

Создайте и постройте график набора 3-D точек.

[x1,y1,z1] = sphere(24);
x1 = x1(:);
y1 = y1(:);
z1 = z1(:);
x2 = x1+5;
[x3,y3,z3] = sphere(5);
x3 = x3(:)+5;
y3 = y3(:);
z3 = z3(:)+25;
P = [x1 y1 z1; x2 y1 z1; 0.25*x3 0.25*y3 0.25*z3];
P = unique(P,'rows');
plot3(P(:,1),P(:,2),P(:,3),'.')
axis equal
grid on

Figure contains an axes. The axes contains an object of type line.

Вычислите альфа-фигуру для набора точек, используя альфа-радиус 1.

shp = alphaShape(P,1);
plot(shp)
axis equal

Figure contains an axes. The axes contains an object of type patch.

В этом случае альфа-форма создает небольшую область над двумя равномерными сферами. Чтобы подавить эту область, можно задать RegionThreshold путем оценки его объема.

Задайте RegionThreshold от 2. Получившаяся форма содержит только две большие области.

shp.RegionThreshold = 2;
plot(shp)
axis equal

Figure contains an axes. The axes contains an object of type patch.

Добавить точки к существующей альфа-форме.

Создайте и постройте график 2-D набора точек.

th = (pi/12:pi/12:2*pi)';
x1 = [reshape(cos(th)*(1:5), numel(cos(th)*(1:5)),1); 0];
y1 = [reshape(sin(th)*(1:5), numel(sin(th)*(1:5)),1); 0];
x = [x1; x1+15;];
y = [y1; y1];
plot(x,y,'.')
axis equal

Figure contains an axes. The axes contains an object of type line.

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

shp = alphaShape(x,y,1);
plot(shp)

Figure contains an axes. The axes contains an object of type patch.

Теперь добавьте третью область к альфа-форме, добавив новые точки непосредственно к shp.Points матрица.

x3 = x1+8;
y3 = y1+10;
shp.Points(end+1,:) = [x3 y3];
plot(shp)

Figure contains an axes. The axes contains an object of type patch.

Введенный в R2014b