alphaShape

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

Описание

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

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

Создание

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

Описание

пример

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 представляйте xY, и 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)

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

  • Для 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 isinf, затем alphaShape производит выпуклую оболочку.

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

Типы данных: 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Граничные фасеты альфа-формы
perimeterПериметр 2D альфа-формы
areaОбласть 2D альфа-формы
surfaceAreaПлощадь поверхности 3-D альфа-формы
volumeОбъем 3-D альфа-формы
plotПостройте альфа-форму
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

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.

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

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

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.

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

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

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