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

    %% Computing the Voronoi Diagram
% This example shows how to compute a 2-D and 3-D Voronoi diagram.

% Copyright 2015 The MathWorks, Inc.


%% Section 1
% Given a set of points, |X|, obtain the topology of the Voronoi diagram as
% follows:
% 
% * Using the |voronoin| function
%
%     [V,R] = voronoin(X)
%
% * Using the |voronoiDiagram| method
%
%     dt = delaunayTriangulation(X);
%
%     [V,R] = voronoiDiagram(dt)
% 
%%
% |V| is a matrix representing the coordinates of the Voronoi vertices (the vertices are the end points of the Voronoi edges). By convention the first vertex in |V| is
% the infinite vertex. |R| is a vector cell array length |size(X,1)|,
% representing the Voronoi region associated with each point. Hence,
% the Voronoi region associated with the point |X|(|i|)
% is |R|{i}.

%%
% Define and plot the voronoi diagram for a set of points
X = [-1.5 3.2; 1.8 3.3; -3.7 1.5; -1.5 1.3; 0.8 1.2; ...
      3.3 1.5; -4.0 -1.0; -2.3 -0.7; 0 -0.5; 2.0 -1.5; ...
      3.7 -0.8; -3.5 -2.9; -0.9 -3.9; 2.0 -3.5; 3.5 -2.25];
[VX,VY] = voronoi(X(:,1),X(:,2));
h = plot(VX,VY,'-b',X(:,1),X(:,2),'.r');
xlim([-4,4])
ylim([-4,4])

% Assign labels to the points X.
nump = size(X,1);
plabels = arrayfun(@(n) {sprintf('X%d', n)}, (1:nump)');
hold on
Hpl = text(X(:,1), X(:,2)+0.2, plabels, 'color', 'r', ...
      'FontWeight', 'bold', 'HorizontalAlignment',...
      'center', 'BackgroundColor', 'none');
  
% Compute the Voronoi diagram.
dt = delaunayTriangulation(X);
[V,R] = voronoiDiagram(dt);


% Assign labels to the Voronoi vertices V.
% By convention the first vertex is at infinity.
numv = size(V,1);
vlabels = arrayfun(@(n) {sprintf('V%d', n)}, (2:numv)');
hold on
Hpl = text(V(2:end,1), V(2:end,2)+.2, vlabels, ...
      'FontWeight', 'bold', 'HorizontalAlignment',...
      'center', 'BackgroundColor', 'none');
hold off
%%
% |R{9}| gives the indices of the Voronoi vertices associated with the
% point site |X9|.
R{9}

%%
% The indices of the Voronoi vertices are the indices with respect to the
% |V| array.

%%
% Similarly, |R{4}| gives the indices of the Voronoi vertices associated
% with the point site |X4|.
R{4}

%%
% In 3-D a Voronoi region is a convex polyhedron, the syntax for creating
% the Voronoi diagram is similar. However the geometry of the Voronoi
% region is more complex. The following example illustrates the creation of
% a 3-D Voronoi diagram and the plotting of a single region.

%%
% Create a sample of 25 points in 3-D space and compute the topology of the
% Voronoi diagram for this point set.
X = -3 + 6.*gallery('uniformdata',[25 3],0);
dt = delaunayTriangulation(X);

%%
% Compute the topology of the Voronoi diagram.
[V,R] = voronoiDiagram(dt);

%%
% Find the point closest to the origin and plot the Voronoi region
% associated with this point.
tid = nearestNeighbor(dt,0,0,0);
XR10 = V(R{tid},:);
K = convhull(XR10);
defaultFaceColor  = [0.6875 0.8750 0.8984];
trisurf(K, XR10(:,1) ,XR10(:,2) ,XR10(:,3) , ...
        'FaceColor', defaultFaceColor, 'FaceAlpha',0.8)
title('3-D Voronoi Region')