## Contents

- Creation of germs
- Display Voronoi polyhedron associated with germ
- Compute and display minimal polyhedron

    function demoVoronoiCell(varargin)

    %DEMOVORONOICELL Compute and display voronoi polyhedron using geom3d library
    %
    %   This demo show how to manipulate polyhedra, using matlab's voronoin
    %   function and the geom3d library.
    %
    %   This demo generate some points in a unit cube, computes the 3D voronoi
    %   diagram from the germs, and isolate the central cell.
    %   This cell is a bounded polyhedron, with polygonal faces. For a better
    %   representation of the polyhedron, coplanar faces are merged and a new
    %   polyhedron is created and displayed.
    %
    %   Usage
    %   demoVoronoiCell
    %
    %   See also
    %   voronoin, delaunayn, convhulln
    %   meshReduce, drawPolyhedron
    %
    %
    % ------
    % Author: David Legland
    % e-mail: david.legland@grignon.inra.fr
    % Created: 2009-06-22,    using Matlab 7.7.0.471 (R2008b)
    % Copyright 2009 INRA - Cepia Software Platform.

## Creation of germs

    % germ of the cell of interest, in the center of the unit cube
    germ0  = [.5 .5 .5];

    % create random germs, and add corners of unit cube to ensure finiteness of
    % voronoi pattern
    [corners faces] = createCube; %#ok<NASGU>
    germs   = [germ0;rand(10, 3);corners];

    % dispay the germs
    figure(1); clf; hold on;
    drawPoint3d(germs);

    % graphical settings
    view(3);
    axis equal;

## Display Voronoi polyhedron associated with germ

    % compute voronoi diagram in 3D using Matlab standard function
    [V C]   = voronoin(germs);

    % the polyhedron corresponding to first germ is given by vertices in C{1}
    indVert = C{1};
    vertices = V(indVert, :);

    % triangular faces can be obtained from convhulln
    K = convhulln(vertices);

    % draw the polyhedron
    drawMesh(vertices, K);

## Compute and display minimal polyhedron

    % merge some faces to reduce total number of faces.
    % new faces are 3D polygons
    % K2 is a cell array, each cell containing a row vector with indices of
    % 'points' corresponding to vertices of each face.
    [V2 F2] = mergeCoplanarFaces(vertices, K);

    % display the germs
    figure(2); clf; hold on;
    set(gcf, 'renderer', 'opengl');
    drawPoint3d(germs);

    % draw the polyhedron
    drawMesh(V2, F2);

    % graphical settings
    view(3);
    axis equal;