exponenta event banner

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' и 'RegionThreshold'применение пороговых значений зависит от порядка. alphaShape заполняет отверстия перед подавлением областей.

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

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

При указании 'HoleThreshold' и '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-й альфа-формы
areaОбласть 2-й альфа-формы
surfaceAreaПлощадь поверхности 3D альфа-формы
volumeОбъем 3D альфа-формы
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