MATLAB Examples

Contents

function demoOnionPeeling(varargin)
%DEMOONIONPEELING  Onion peeling of a set of points
%
%   Just a demo for the convexHull function
%
%   Example
%   demoOnionPeeling
%
%   See also
%   convexHull, polygons2d
%
%
% ------
% Author: David Legland
% e-mail: david.legland@grignon.inra.fr
% Created: 2011-04-08,    using Matlab 7.9.0.529 (R2009b)
% Copyright 2011 INRA - Cepia Software Platform.

Data generation

% random points within unit square
points = rand(50, 2);

% display
figure; hold on;
drawPoint(points, '.');

Convex hull

% compute hull
hull = convexHull(points);

% display
drawPolygon(hull, 'linewidth', 2);

Onion peeling

% initialize array of hulls
layers = {};
nLayers = 0;

% remove convex hull of the current set of points, and iterates until there
% is no more point on the hull
while size(points, 1) > 2
    % compute current layer
    [hull inds] = convexHull(points);

    % add a layer
    nLayers = nLayers + 1;
    layers{nLayers} = hull; %#ok<AGROW>

    % remove vertices of the convex hull
    points(inds, :) = [];
end

% draw resulting layers
for i = 1:nLayers
    drawPolygon(layers{i});
end