TRIANGULATION_MASK
Remove Triangles from a Triangulation


TRIANGULATION_MASK is a FORTRAN90 program, using double precision arithmetic, 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 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 triangles.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:

subroutine triangle_mask ( dim_num, triangle_order, nodes, coord, mask )

with arguments:
dim_num
input, the spatial dimension, always equal to 2.
triangle_order
input, the number of nodes in the triangle, usually 3 or 6;
nodes
input, an integer array of dimension triangle_order, containing the indices of each node of the triangle;
coord
input, a real ( kind = 8 ) array of dimension dim_num by triangle_order, containing the x and y coordinates of each node of the triangle;
mask
output, a logical value, which is true if the triangle should be deleted or "masked", and false if the triangle should be preserved;

Usage:

f90 triangulation_mask.o triangle_mask.f90
compiles the user routine triangle_mask.f90 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 node_file triangle_file
reads the triangulation described by the node file and the triangle file, calls the user mask routine for each triangle, and writes out the new node and triangle files.

Related Data and Programs:

TABLE is the format used for the input and output files.

TABLE_DELAUNAY is an executable FORTRAN90 program which can compute the Delaunay triangulation of a set of points.

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 also available in a C++ version and a MATLAB version.

TRIANGULATION_ORIENT is an executable FORTRAN90 program that reads data defining a triangulation and reorients those triangles that have negative orientation.

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_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. 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:

SMALL 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 FORTRAN90 source codes.


Last revised on 14 January 2007.