www.gusucode.com > matlab 案例源码 matlab代码程序 > matlab/NearestNeighborSearchExample.m

    %% Nearest-Neighbor Search
% 

% Copyright 2015 The MathWorks, Inc.


%% Section 1
% This example shows how to perform a nearest-neighbor search in 2-D with
% |delaunayTriangulation|.

%%
% Begin by creating a random set of 15 points.
X = [3.5 8.2; 6.8 8.3; 1.3 6.5; 3.5 6.3; 5.8 6.2; 8.3 6.5;...
    1 4; 2.7 4.3; 5 4.5; 7 3.5; 8.7 4.2; 1.5 2.1; 4.1 1.1; ...
    7 1.5; 8.5 2.75];

%%
% Plot the points and add annotations to show the ID labels.
plot(X(:,1),X(:,2),'ob')
hold on
vxlabels = arrayfun(@(n) {sprintf('X%d', n)}, (1:15)');
Hpl = text(X(:,1)+0.2, X(:,2)+0.2, vxlabels, 'FontWeight', ...
  'bold', 'HorizontalAlignment','center', 'BackgroundColor', ...
  'none');
hold off

%%
% Create a Delaunay triangulation from the points.
dt = delaunayTriangulation(X);

%%
% Create some query points and for each query point find the index of its
% corresponding nearest neighbor in |X| using the |nearestNeighbor| method.
numq = 10;
rng(0,'twister');
q = 2+rand(numq,2)*6;
xi = nearestNeighbor(dt, q);

%%
% Add the query points to the plot and add line segments joining the query
% points to their nearest neighbors.
xnn = X(xi,:);

hold on
plot(q(:,1),q(:,2),'or');
plot([xnn(:,1) q(:,1)]',[xnn(:,2) q(:,2)]','-r');

vxlabels = arrayfun(@(n) {sprintf('q%d', n)}, (1:numq)');
Hpl = text(q(:,1)+0.2, q(:,2)+0.2, vxlabels, 'FontWeight', ...
     'bold', 'HorizontalAlignment','center', ...
     'BackgroundColor','none');

hold off

%%
% Performing a nearest-neighbor search in 3-D is a direct extension of the
% 2-D example based on |delaunayTriangulation|.