Main Content

nearestNeighbor

确定最近的 alpha 形状边界点

说明

对于二维 alpha 形状 shpI = nearestNeighbor(shp,qx,qy) 返回最接近查询点的 shp 边界上的点的索引。I 是由最近邻点索引组成的数组,其中每个索引对应于 shp.Points 中的行索引。qxqy 查询坐标的大小必须相同。

对于三维 alpha 形状,I = nearestNeighbor(shp,qx,qy,qz) 返回最接近 (qx,qy,qz)shp 的边界点的索引,该索引对应于 shp.Points 中的行索引。qxqyqz 查询坐标的大小必须相同。

示例

I = nearestNeighbor(shp,QP) 将查询点指定为矩阵 QP。对于二维 alpha 形状,QP 是由两列数值组成的矩阵,这两列数值分别代表 qxqy 坐标。对于三维 alpha 形状,QP 包含三列数值,分别代表 qxqyqz 坐标。

I = nearestNeighbor(___,RegionID) 返回位于由 RegionID 指定的区域边界处的最近点的索引,其中,1RegionIDnumRegions(shp)。您可以包括上述语法中的任何输入参量。

此外,[I,D] = nearestNeighbor(___) 还返回查询点与其最近邻点之间的欧几里德距离。D 的大小与 I 相同。

示例

全部折叠

创建一个二维点集。

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];

创建并绘制阿尔法半径等于 1 的阿尔法形状。

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

计算距离查询点 QP 最近的 shp 边界点。用蓝色绘制查询点,用红色绘制该查询点的最近邻界点。

QP = [6 3];
plot(QP(1),QP(2),'b.','MarkerSize',10)
hold on
I = nearestNeighbor(shp, QP);
plot(shp.Points(I,1),shp.Points(I,2),'r.','MarkerSize',10)

输入参数

全部折叠

alpha 形状,指定为 alphaShape 对象。有关详细信息,请参阅 alphaShape

示例: shp = alphaShape(x,y) 根据 (x,y) 点坐标创建一个二维 alphaShape 对象。

查询点 x 坐标,指定为数值数组。

数据类型: double

查询点 y 坐标,指定为数值数组。

数据类型: double

查询点 z 坐标,指定为数值数组。

数据类型: double

查询点坐标,指定为两列矩阵或三列矩阵。

  • 对于二维形状,P 的列分别表示 qx 坐标和 qy 坐标。

  • 对于三维形状,P 的列分别表示 qxqyqz 坐标。

数据类型: double

alpha 形状中区域的 ID 编号,指定为介于 1numRegions(shp) 之间的一个正整数标量。

alpha 形状可以包含多个较小的区域,具体取决于点集和参数。其中每个较小的区域都分配有一个唯一的 RegionID,以便于依照从最大面积或体积到最小面积或体积的顺序对这些区域进行编号。例如,考虑使用包含两个区域的三维 alpha 形状。体积较大的区域的 RegionID 为 1,较小区域的 RegionID 为 2。

示例: shp.RegionThreshold = area(shp,numRegions(shp)-2); 隐藏二维 alpha 形状 shp 中的两个最小区域。

数据类型: double

输出参量

全部折叠

最近邻点索引,以整数值数组的形式返回。这些索引对应于 shp.Points 的行索引,指代最接近指定查询点的 shp 边界上的点。

查询点到最近邻点的距离,以数值数组形式返回。D 是二维或三维欧几里德距离,其大小与 I 相同。

扩展功能

基于线程的环境
使用 MATLAB® backgroundPool 在后台运行代码或使用 Parallel Computing Toolbox™ ThreadPool 加快代码运行速度。

版本历史记录

在 R2015a 中推出

另请参阅