CVT
Centroidal Voronoi Tessellations


CVT is a C++ library, using double precision arithmetic, for creating Centroidal Voronoi Tessellation (CVT) datasets.

The generation of a CVT dataset is of necessity more complicated than for a quasirandom sequence. An iteration is involved, so there must be an initial assignment for the generators, and then a number of iterations. Moreover, in each iteration, estimates must be made of the volume and location of the Voronoi cells. This is typically done by Monte Carlo sampling. The accuracy of the resulting CVT depends in part on the number of sampling points and the number of iterations taken.

The library is mostly used to generate a dataset of points uniformly distributed in the unit hypersquare. However, a user may be interested in computations with other geometries or point densities. To do this, the user needs to replace the USER routine in the CVT library, and then specify the appropriate values init=3 and sample=3.

The USER routine returns a set of sample points from the region of interest. The default USER routine samples points uniformly from the unit circle. But other geometries are easy to set up. Changing the point density simply requires weighting the sampling in the region.

Related Data and Programs:

CCVT_BOX is a C++ program for computing a CVT with some points forced to lie on the boundary.

CVT is also available in a FORTRAN90 version and a MATLAB version.

CVT is a dataset directory which contains files describing a number of CVT's.

CVT_DATASET is an interactive C++ program for creating a CVT dataset.

FAURE is a C++ library of routines for computing Faure sequences.

GRID is a C++ library of routines for computing points on a grid.

HALTON is a C++ library of routines for computing Halton sequences.

HAMMERSLEY is a C++ library of routines for computing Hammersley sequences.

HEX_GRID is a C++ library of routines for computing sets of points in a 2D hexagonal grid.

IHS is a C++ library of routines for computing improved Latin Hypercube datasets.

LATIN_CENTER is a C++ library of routines for computing Latin square data choosing the center value.

LATIN_EDGE is a C++ library of routines for computing Latin square data choosing the edge value.

LATIN_RANDOM is a C++ library of routines for computing Latin square data choosing a random value in the square.

NIEDERREITER2 is a C++ library of routines for computing Niederreiter sequences with base 2.

NORMAL is a C++ library which computes elements of a sequence of pseudorandom normally distributed values.

SOBOL is a C++ library of routines for computing Sobol sequences.

UNIFORM is a C++ library of routines for computing uniform random values.

VAN_DER_CORPUT is a C++ library of routines for computing van der Corput sequences.

Reference:

  1. Franz Aurenhammer,
    Voronoi diagrams - a study of a fundamental geometric data structure,
    ACM Computing Surveys,
    Volume 23, Number 3, pages 345-405, September 1991,
    ../../pdf/aurenhammer.pdf
  2. Paul Bratley, Bennett Fox, Linus Schrage,
    A Guide to Simulation,
    Springer Verlag, pages 201-202, 1983.
  3. John Burkardt, Max Gunzburger, Janet Peterson, Rebecca Brannon,
    User Manual and Supporting Information for Library of Codes for Centroidal Voronoi Placement and Associated Zeroth, First, and Second Moment Determination,
    Sandia National Laboratories Technical Report SAND2002-0099,
    February 2002.
    Online ordering
  4. Qiang Du, Vance Faber, Max Gunzburger,
    Centroidal Voronoi Tessellations: Applications and Algorithms,
    SIAM Review,
    Volume 41, 1999, pages 637-676.
  5. Bennett Fox,
    Algorithm 647:
    Implementation and Relative Efficiency of Quasirandom Sequence Generators,
    ACM Transactions on Mathematical Software,
    Volume 12, Number 4, pages 362-376, 1986.
  6. John Halton,
    On the efficiency of certain quasi-random sequences of points in evaluating multi-dimensional integrals,
    Numerische Mathematik,
    Volume 2, pages 84-90, 1960.
  7. Lili Ju, Qiang Du, Max Gunzburger,
    Probabilistic methods for centroidal Voronoi tessellations and their parallel implementations,
    Parallel Computing,
    Volume 28, 2002, pages 1477-1500.

Source Code:

Source code files you may copy include:

Examples and Tests:

List of Routines:

You can go up one level to the C++ source codes.


Last revised on 10 November 2006.