CVT_TRIANGULATION
Centroidal Voronoi Tessellation
for Triangularization


CVT_TRIANGULATION is a FORTRAN90 program, using double precision arithmetic, which applies CVT methods to produce triangularizations of various test regions.

Note that, when using this program, we begin with a region, which is to be filled up with a number of (unspecified) points and triangularized.

Other programs, such as TABLE_DELAUNAY, are available for the case where the points are already given, and only the triangles need to be determined.

Related Programs:

CVT_TET_MESH is a FORTRAN90 program which applies CVT methods to produce a tetrahedral mesh of various test regions in 3D.

DISTMESH is a MATLAB program which takes the definition of a 2D region, and fills it up with a set of nodes, and triangulates those nodes to make a triangulation of the region. The region may be nonconvex and may include holes; the user may request a specific density for the nodes, and may require certain points to be in the set of nodes.

HEX_GRID_TRIANGULATE is an FORTRAN90 program which uses this library of test regions and computes points on a hexagonal grid inside each region.

PLOT_POINTS is a FORTRAN90 program which can be used to make simple plots of the computed points. For nonconvex regions, the Delaunay plots can be confusing. The plotting program is simple-minded, and merrily draws sides of triangles that go through holes or areas exterior to the region. In a few cases, it has been possible to draw the outline of the boundary of the region, but PLOT_POINTS cannot do very much in this regard.

TABLE is a file format used for the output files containing the CVT points.

TABLE_DELAUNAY is an executable FORTRAN90 program which reads in a TABLE file of points and writes out a corresponding triangulation.

TEST_TRIANGULATION is a FORTRAN90 library of routines which can set up a number of triangulation test problems.

TRIANGLE is an executable C program which computes a triangulation of a geometric region.

TRIANGULATION is a FORTRAN90 library of routines for carrying out various operations on order 3 ("linear") or order 6 ("quadratic") triangulations.

TRIANGULATION_BOUNDARY_NODES is an executable FORTRAN90 program that reads data defining a triangulation, determines which nodes lie on the boundary, and writes their coordinates to a file.

TRIANGULATION_DISPLAY_OPEN_GL is an executable C++ program which reads files defining a triangulation and displays an image using Open GL.

TRIANGULATION_L2Q is an executable FORTRAN90 program that reads data defining a 3-node triangulation and generates midside nodes and writes out the corresponding 6-node triangulation.

TRIANGULATION_MASK is an executable FORTRAN90 program, which takes an existing triangulation and deletes triangles and their corresponding nodes as requested by the user.

TRIANGULATION_ORDER3 is a directory which contains a description and examples of order 3 triangulations.

TRIANGULATION_ORDER6 is a directory which contains a description and examples of order 6 triangulations.

TRIANGULATION_ORIENT is an executable FORTRAN90 program that reads data defining a triangulation, makes sure that every triangle has positive orientation, and if not, writes a corrected triangle file.

TRIANGULATION_PLOT is an executable FORTRAN90 program that reads data defining a triangulation and creates a PostScript image of the nodes and triangles.

TRIANGULATION_Q2L is an executable FORTRAN90 program that reads data defining a 6-node triangulation, and subdivides each triangle into 4 3-node triangles, writing the resulting triangulation to a file.

TRIANGULATION_QUALITY is an executable FORTRAN90 program that reads data defining a triangulation and computes a number of quality measures.

TRIANGULATION_RCM is an executable FORTRAN90 program that reads data defining a triangulation, determines an ordering of the nodes that will reduce the bandwidth of the adjacency matrix, and writes the new triangulation information to a file.

TRIANGULATION_REFINE is an executable FORTRAN90 program that reads data defining a triangulation, replaces each triangle by four congruent smaller ones, and writes the new triangulation information to a file.

TRIANGULATION_TRIANGLE_NEIGHBORS is an executable FORTRAN90 program that reads data defining a triangulation, determines the neighboring triangles of each triangle, and writes that information to a file.

Reference:

  1. Franz Aurenhammer,
    Voronoi diagrams - a study of a fundamental geometric data structure,
    ACM Computing Surveys,
    Volume 23, Number 3, September 1991, pages 345-405,
    ../../pdf/aurenhammer.pdf
  2. Marc deBerg, Marc Krevald, Mark Overmars, Otfried Schwarzkopf,
    Computational Geometry,
    Springer, 2000,
    ISBN: 3-540-65620-0.
  3. Qiang Du, Vance Faber, Max Gunzburger,
    Centroidal Voronoi Tessellations: Applications and Algorithms,
    SIAM Review,
    Volume 41, 1999, pages 637-676.
  4. Lili Ju, Qiang Du, Max Gunzburger,
    Probabilistic methods for centroidal Voronoi tessellations and their parallel implementations,
    Parallel Computing,
    Volume 28, 2002, pages 1477-1500.
  5. Joseph ORourke,
    Computational Geometry,
    Second Edition,
    Cambridge, 1998,
    ISBN: 0521649765,
    LC: QA448.D38.
  6. Per-Olof Persson, Gilbert Strang,
    A Simple Mesh Generator in MATLAB,
    SIAM Review,
    Volume 46, Number 2, June 2004, pages 329-345.

Source Code:

There are some files for use with the PLOT_POINTS program:

Examples and Tests:

Region 1 is the circle:

Region 2 is the circle with a circular hole:

Region 3 is the square with a circular hole:

Region 4 is the hexagon with a hexagonal hole:

Region 5 is the horn:

Region 6 is the superellipse with the superelliptical hole:

Region 7 is the "bicycle seat":

Region 8 is the pie slice:

Region 9 is the square with two hexagonal holes:

Region 10 is the unit square:

Region 11 is the L-shaped region:

Region 12 is the H-shaped region:

Region 13 is the fork:

Region 14 is Lake Alpha, with Beta Island:

List of Routines:

You can go up one level to the FORTRAN90 source codes.


Last revised on 15 November 2005.