TRIANGULATION_MASK
Remove Triangles from a Triangulation


TRIANGULATION_MASK is a C++ program which reads the nodes and triangles that define a triangulation, calls a user routine which determines whether each triangle is to be preserved or discarded ("masked") from the triangulation, and writes out new node and triangle files that define the masked triangulation.

The input file prefix_nodes.txt contains the node information for the triangulation. Each data line contains the X and Y coordinates of a single node.

The input file prefix_elements.txt contains the triangle information for the triangulation. Each line contains the indices of 3 or 6 nodes that form a triangle.

One motivation for creating this program is as follows. Suppose we have a set of points that lie on the boundary or inside of a non-convex region. If we naively call an unconstrained Delaunay triangulation routine, such as TABLE_DELAUNAY, then because the region is not convex, it is possible to create triangles which lie outside the region.

An easy way to correct this problem is to call a user routine and pass it the indices and coordinates of each triangle. The user can then decide to drop any triangle whose centroid, say, lies outside the region.

Other masking criteria might drop triangles that are too small, or that have too small an angle, or that lie inside some interior hole. These choices are entirely up to the user.

The user masking subroutine has the form:

bool triangle_mask ( int dim_num, int triangle_order, int nodes[], double coord[] )

with arguments:
dim_num
input, the spatial dimension, always equal to 2.
element_order
input, the number of nodes in the triangle, usually 3 or 6;
nodes
input, an integer array of dimension element_order, containing the indices of each node of the triangle;
coord
input, a double array of dimension dim_num by element_order, containing the x and y coordinates of each node of the triangle;
triangle_mask
output, a boolean value, which is true if the triangle should be deleted or "masked", and false if the triangle should be preserved;

Usage:

g++ triangulation_mask.o triangle_mask.C
compiles the user routine triangle_mask.C and links it with the partially compiled triangulation_mask.o to create an executable a.out. We will assume that a.out is renamed to triangulation_mask.

triangulation_mask prefix
where prefix is the common filename prefix:

Licensing:

The computer code and data files described and made available on this web page are distributed under the GNU LGPL license.

Related Data and Programs:

TABLE is a data format which is used for the input and output files.

TABLE_DELAUNAY is a C++ program which can compute the Delaunay triangulation of a set of points.

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

TRIANGULATION is a C++ library which carries out various operations on order 3 ("linear") or order 6 ("quadratic") triangulations.

TRIANGULATION_BOUNDARY_NODES is a C++ program which reads data defining a triangulation, determines which nodes lie on the boundary, and writes their coordinates to a file.

TRIANGULATION_CORNER, a C++ program which patches triangulations so that no triangle has two sides on the boundary.

TRIANGULATION_DELAUNAY_DISCREPANCY is a C++ program which measures the amount by which a triangulation fails the local Delaunay test;

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

TRIANGULATION_HISTOGRAM, a C++ program which computes histograms of data over a triangulation.

TRIANGULATION_L2Q is a C++ program which reads data defining a 3-node triangulation and generates midside nodes and writes out the corresponding 6-node triangulation.

TRIANGULATION_MASK is available in a C++ version and a FORTRAN90 version and a MATLAB version.

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 a C++ program which reads data defining a triangulation, makes sure that every triangle has positive orientation, and if not, writes a corrected triangle file.

TRIANGULATION_PLOT is a C++program which reads data defining a triangulation and creates a PostScript image of the nodes and triangles.

TRIANGULATION_Q2L is a C++ program which 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 a C++ program which reads data defining a triangulation and computes a number of quality measures.

TRIANGULATION_RCM is a C++ program which 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 a C++ program which 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 a C++ program which 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.
  2. Marc deBerg, Marc Krevald, Mark Overmars, Otfried Schwarzkopf,
    Computational Geometry,
    Springer, 2000,
    ISBN: 3-540-65620-0.
  3. Barry Joe,
    GEOMPACK - a software package for the generation of meshes using geometric algorithms,
    Advances in Engineering Software,
    Volume 13, 1991, pages 325-331.
  4. Albert Nijenhuis, Herbert Wilf,
    Combinatorial Algorithms for Computers and Calculators,
    Second Edition,
    Academic Press, 1978,
    ISBN: 0-12-519260-6,
    LC: QA164.N54.
  5. Atsuyuki Okabe, Barry Boots, Kokichi Sugihara, Sung Nok Chiu,
    Spatial Tesselations: Concepts and Applications of Voronoi Diagrams,
    Second Edition,
    Wiley, 2000,
    ISBN: 0-471-98635-6,
    LC: QA278.2.O36.
  6. Joseph ORourke,
    Computational Geometry,
    Second Edition,
    Cambridge, 1998,
    ISBN: 0521649765,
    LC: QA448.D38.

Source Code:

Examples and Tests:

SMALL3 is a triangulation of the 25 lattice points on the [0,4]x[0,4] square. Our masking operation should cut out a lower left triangular corner and a section from the upper right.

P15 is a triangulation created by calling DISTMESH, then removing duplicate points by calling TABLE_MERGE, then creating a Delaunay triangulation by calling TABLE_DELAUNAY, Unfortunately, this results in many triangles that lie outside the region of interest.

List of Routines:

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


Last revised on 22 August 2009.