triangulation_mask


triangulation_mask, an Octave code 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.

Usage:

In the following discussion, the user masking routine is called "triangle_mask", but the actual name is arbitrary. The actual name is passed as the third argument into the program. It must be preceded by an "@" sign, so that MATLAB knows that this is the name of a function (technically, a MATLAB "function handle").

The user masking routine has the form:

function mask = triangle_mask ( dim_num, triangle_order, nodes, coord )
with arguments:

The command to invoke the program has the form:

triangulation_mask ( 'prefix_file', @'triangle_mask' )
where prefix is the common filename prefix: and reads the triangulation described by the node file and the triangle file, calls the user triangle mask routine for each triangle, and writes out the new node and triangle files.

Licensing:

The information on this web page is distributed under the MIT license.

Languages:

triangulation_mask is available in a C++ version and a Fortran90 version and a MATLAB version and an Octave version.

Related Data and Programs:

triangulation_mask_test

triangulation, an Octave code which carries out various operations on order 3 (linear) or order 6 (quadratic) triangulations.

triangulation_boundary_edges, an Octave code which reads data defining a triangulation, determines which edges lie on the boundary, organizes them into connected components, and writes this information to a file.

triangulation_boundary_nodes, an Octave code which reads data defining a triangulation, determines which nodes lie on the boundary, and writes their coordinates to a file.

triangulation_corner, an Octave code which patches triangulations so that no triangle has two sides on the boundary.

triangulation_delaunay_discrepancy, an Octave code which measures the amount by which a triangulation fails the local Delaunay test;

triangulation_display, an Octave code which displays the nodes and elements of a triangulation on the graphics screen;

triangulation_histogram, an Octave code which computes histograms of data over a triangulation.

triangulation_l2q, an Octave code which reads data defining a 3-node triangulation and generates midside nodes and writes out the corresponding 6-node triangulation.

triangulation_order3, a directory which contains a description and examples of order 3 triangulations.

triangulation_order6, a directory which contains a description and examples of order 6 triangulations.

triangulation_orient, an Octave code which reads data defining a triangulation, makes sure that every triangle has positive orientation, and if not, writes a corrected triangle file.

triangulation_plot, an Octave code which reads data defining a triangulation and creates a postscript image of the nodes and triangles.

triangulation_q2l, an Octave code 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_quad, an Octave code which estimates the integral of a function over a triangulated region.

triangulation_quality, an Octave code which reads data defining a triangulation and computes a number of quality measures.

triangulation_rcm, an Octave code 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, an Octave code 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, an Octave code 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:


Last revised on 21 September 2024.