Main Content

nearestNeighbor

最靠近指定点的顶点

说明

示例

ID = nearestNeighbor(TR,P) 返回最接近 P 中查询点的顶点的 ID。矩阵 P 中的每行都包含一个查询点的坐标。

ID = nearestNeighbor(TR,x,y) 将二维查询点的 x 坐标和 y 坐标指定为单独的列向量。

示例

ID = nearestNeighbor(TR,x,y,z) 将三维查询点的 x 坐标、y 坐标和 z 坐标指定为单独的列向量。

示例

对于上述任意语法,[ID,d] = nearestNeighbor(___) 还会返回每个查询点与其最近邻点之间的欧几里德距离。

示例

全部折叠

计算三维三角剖分中的最近邻点。

创建三维德劳内三角剖分。

P = [1 1 0; -1 1 0; -1 -1 0; 1 -1 0; 0 0 2; 0 0 0];
TR = delaunayTriangulation(P);

绘图三角剖分和查询点。

tri = TR(:,:);
trisurf(tri,P(:,1),P(:,2),P(:,3),'FaceAlpha',0.5)
hold on
x = 0;
y = -0.5;
z = 2;
plot3(x,y,z,'k*')

查找查询点的最近邻点的坐标。

ID = nearestNeighbor(TR,x,y,z);
C = TR.Points(ID,:)
C = 1×3

     0     0     2

计算二维三角剖分中的最近邻点。

创建二维三角剖分。

C = [5 3 1; 3 2 1; 3 4 2; 4 6 2];
TP = [2.5 8.0; 6.5 8.0; 2.5 5.0; 6.5 5.0; 1.0 6.5; 8.0 6.5];
TR = triangulation(C,TP);

定义两个查询点。

P = [2 4; 6 6.5];

绘图三角剖分和查询点。

triplot(TR)
hold on
plot(P(:,1),P(:,2),'k*')
ylim([1.5 8.5])
xlim([0.5 8.5])

查找查询点的最近邻点以及它们之间的距离。

[ID,d] = nearestNeighbor(TR,P);

用红色突出显示三角剖分中查询点的最近邻点。

N = TP(ID,:);
plot(N(:,1),N(:,2),'*r')

显示每个查询点与其最近邻点之间的距离。

d
d = 2×1

    1.1180
    1.5811

输入参数

全部折叠

三角剖分表示,指定为标量 triangulationdelaunayTriangulation 对象。nearestNeighbor 不支持具有约束边的 delaunayTriangulation 对象。

数据类型: triangulation | delaunayTriangulation

查询点,指定为包含两列或三列的矩阵。P 包含查询点的 x 坐标和 y 坐标,还可能包含 z 坐标。

数据类型: double

查询点的 x 坐标,指定为列向量。

数据类型: double

查询点的 y 坐标,指定为列向量。

数据类型: double

查询点的 z 坐标,指定为列向量。

数据类型: double

输出参量

全部折叠

查询点的最近邻点的顶点 ID,以列向量形式返回。顶点 ID 是 Points 属性中对应顶点的行号。

数据类型: double

从查询点到其最近邻点的欧几里德距离,以长度与 ID 相同的列向量形式返回。

数据类型: double

扩展功能

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

版本历史记录

在 R2013a 中推出