alphaShape

Полигоны и многогранники от точек в 2D и 3-D

Описание

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

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

Создание

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

Синтаксис

shp = alphaShape(x,y)
shp = alphaShape(x,y,z)
shp = alphaShape(P)
shp = alphaShape(___,a)
shp = alphaShape(___,Name,Value)

Описание

пример

shp = alphaShape(x,y) создает 2D альфа-форму точек (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

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

  • Для 2D столбцы 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) — соответствующее значение. Имя должно появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

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

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

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

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

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

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

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

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

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

Свойства

развернуть все

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

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

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

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

Экстремумы Alpha имеют следующие условия:

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

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

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

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

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

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

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

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

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

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

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

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

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

Примеры

свернуть все

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

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

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

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

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

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

shp.Alpha
ans = 0.7752

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

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

shp.Alpha = 2.5;
plot(shp)

Найдите форму 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

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

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

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

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

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

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

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

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

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

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

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

Создайте и постройте график набора 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

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

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

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

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

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

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

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

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

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

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

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

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

Введенный в R2014b

Была ли эта тема полезной?