TRIANGULATION Triangulation of 2D data

TRIANGULATION is a C library which computes a triangulation of a set of points in 2D, and carries out various other related operations on triangulations of order 3 or 6.

The mesh is the collection of triangles. Each triangle is termed an "element". The points used to define the shape of the triangle (the corners, and sometimes a few more points) are called the "nodes".

Routines are available to:

• evaluate "quality measures" for the mesh;
• create a "node neighbor array" for each node;
• create an "element neighbor array" for each element;
• estimate the integral of a function over the region covered by the mesh;
• plot the nodes and elements of a mesh;
• determine the parts of the mesh that lie on the boundary;
• sample points at random from the region covered by the mesh;
• search a mesh to determine which element contains a point.

Since triangulations are often used to define a finite element mesh, which in turn defines a sparse matrix, there are routines available which can define the sparse compressed column arrays needed for a sparse matrix associated with a mesh of order 3 or 6. The special case of the Taylor-Hood mixed element is also handled, which is essentially an order 6 grid counted twice and an order 3 grid that only uses the vertices of the order 6 grid.

Languages:

TRIANGULATION is available in a C version and a C++ version and a FORTRAN77 version and a FORTRAN90 version and a MATLAB version.

Related Programs:

CVT_TRIANGULATION, a FORTRAN90 program which uses routines from the TEST_TRIANGULATION library to create a CVT-based triangularization.

DISTMESH, 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.

MESH_TO_XML, a C program which reads information defining a 1D, 2D or 3D mesh, namely a file of node coordinates and a file of elements defined by node indices, and creates a corresponding XML file for input to DOLFIN or FENICS.

TABLE_DELAUNAY, a C++ program which reads a file of 2d point coordinates and computes the Delaunay triangulation.

TEST_TRIANGULATION, a FORTRAN90 library which sets up a number of triangulation test problems.

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

TRIANGULATION_BOUNDARY_NODES, 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, a C++ program which measures the amount by which a triangulation fails the local Delaunay test;

TRIANGULATION_DISPLAY_OPENGL, 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, 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, a C++ program, which takes an existing triangulation and deletes triangles and their corresponding nodes as requested by the user.

TRIANGULATION_NODE_TO_ELEMENT, a C program which reads files describing a set of nodes, their triangulation, and the value of one or more quantities at each node, and outputs a file that averages the quantities for each element. This operation in effect creates an "order1" finite element model of the data.

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, 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, a C++ program which reads data defining a triangulation and creates a PostScript image of the nodes and triangles.

TRIANGULATION_Q2L, 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_QUAD, a C++ program which estimates the integral of a function over a triangulated region.

TRIANGULATION_QUALITY, a C++ program which reads data defining a triangulation and computes a number of quality measures.

TRIANGULATION_RCM, 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, 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_SVG, a C program which creates a Scalable Vector Graphics (SVG) image of a triangulation, which can be displayed by a web browser.

TRIANGULATION_TRIANGLE_NEIGHBORS, a C program which reads data defining a triangulation, determines the neighboring triangles of each triangle, and writes that information to a file.

References:

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. Paul Bratley, Bennett Fox, Linus Schrage,
A Guide to Simulation,
Second Edition,
Springer, 1987,
ISBN: 0387964673.
3. Marc deBerg, Marc Krevald, Mark Overmars, Otfried Schwarzkopf,
Computational Geometry,
Springer, 2000,
ISBN: 3-540-65620-0.
4. Barry Joe,
GEOMPACK - a software package for the generation of meshes using geometric algorithms,
Volume 13, 1991, pages 325-331.
5. Albert Nijenhuis, Herbert Wilf,
Combinatorial Algorithms for Computers and Calculators,
Second Edition,
ISBN: 0-12-519260-6,
LC: QA164.N54.
6. Atsuyuki Okabe, Barry Boots, Kokichi Sugihara, Sung Nok Chiu,
Spatial Tessellations: Concepts and Applications of Voronoi Diagrams,
Second Edition,
Wiley, 2000,
ISBN: 0-471-98635-6,
LC: QA278.2.O36.
7. Joseph ORourke,
Computational Geometry,
Second Edition,
Cambridge, 1998,
ISBN: 0521649765,
LC: QA448.D38.

List of Routines:

• ALPHA_MEASURE determines the triangulated pointset quality measure ALPHA.
• ANGLE_RAD_2D returns the angle in radians swept out between two rays in 2D.
• ARC_COSINE computes the arc cosine function, with argument truncation.
• AREA_MEASURE determines the area ratio quality measure.
• BANDWIDTH determines the bandwidth associated with the finite element mesh.
• DELAUNAY_SWAP_TEST performs the Delaunay swap test.
• DIAEDG chooses a diagonal edge.
• GET_SEED returns a random seed for the random number generator.
• I4_MAX returns the maximum of two I4's.
• I4_MIN returns the smaller of two I4's.
• I4_MODP returns the nonnegative remainder of I4 division.
• I4_POWER returns the value of I^J.
• I4_SIGN returns the sign of an I4.
• I4_SWAP switches two I4's.
• I4_UNIFORM returns a scaled pseudorandom I4.
• I4_WRAP forces an I4 to lie between given limits by wrapping.
• I4COL_COMPARE compares columns I and J of an I4COL.
• I4COL_SORT_A ascending sorts an I4COL.
• I4COL_SORTED_UNIQUE_COUNT counts unique elements in an I4COL.
• I4COL_SWAP swaps two columns of an I4COL.
• I4I4_SORT_A ascending sorts a pair of I4's.
• I4MAT_TRANSPOSE_PRINT prints an I4MAT, transposed.
• I4MAT_TRANSPOSE_PRINT_SOME prints some of an I4MAT, transposed.
• I4VEC_HEAP_D reorders an I4VEC into a descending heap.
• I4VEC_INDICATOR_NEW sets an I4VEC to the indicator vector.
• I4VEC_MIN returns the value of the minimum element in an I4VEC.
• I4VEC_PRINT prints an I4VEC.
• I4VEC_REVERSE reverses the elements of an I4VEC.
• I4VEC_SORT_HEAP_A ascending sorts an I4VEC using heap sort.
• I4VEC_SORTED_UNIQUE finds unique elements in a sorted I4VEC.
• I4VEC2_COMPARE compares pairs of integers stored in two vectors.
• I4VEC2_SORT_A ascending sorts a vector of pairs of integers.
• I4VEC2_SORTED_UNIQUE keeps the unique elements in a array of pairs of integers.
• LRLINE determines where a point lies in relation to a directed line.
• LVEC_PRINT prints a logical vector.
• NODE_MERGE detects nodes that should be merged.
• NS_ADJ_COL_SET sets the COL array in a Navier Stokes triangulation.
• NS_ADJ_ROW_SET sets the Navier Stokes sparse compressed column row indices.
• PERM_CHECK checks that a vector represents a permutation.
• PERM_INVERSE inverts a permutation "in place".
• POINTS_DELAUNAY_NAIVE_2D computes the Delaunay triangulation in 2D.
• POINTS_HULL_2D computes the convex hull of a set of nodes in 2D.
• POINTS_POINT_NEAR_NAIVE_ND finds the nearest point to a given point in ND.
• Q_MEASURE determines the triangulated pointset quality measure Q.
• R4_ABS returns the absolute value of an R4.
• R4_NINT returns the nearest integer to an R4.
• R8_ABS returns the absolute value of an R8.
• R8_EPSILON returns the roundoff unit for R8 arithmetic.
• R8_HUGE returns the largest legal R8.
• R8_MAX returns the maximum of two R8's.
• R8_MIN returns the minimum of two R8's.
• R8_NINT returns the nearest integer to an R8.
• R8_UNIFORM_01 returns a unit pseudorandom R8.
• R82VEC_PERMUTE permutes an R82VEC in place.
• R82VEC_SORT_HEAP_INDEX_A does an indexed heap ascending sort of an R82VEC.
• R8MAT_PRINT prints an R8MAT, with an optional title.
• R8MAT_PRINT_SOME prints some of an R8MAT.
• R8MAT_TRANSPOSE_PRINT prints an R8MAT, transposed.
• R8MAT_TRANSPOSE_PRINT_SOME prints some of an R8MAT, transposed.
• R8MAT_UNIFORM_01 returns a unit pseudorandom R8MAT.
• R8TRIS2 constructs a Delaunay triangulation of 2D vertices.
• R8VEC_BRACKET searches a sorted array for successive brackets of a value.
• R8VEC_MAX returns the value of the maximum element in an R8VEC.
• R8VEC_MIN returns the value of the minimum element in an R8VEC.
• S_LEN_TRIM returns the length of a string to the last nonblank.
• SORT_HEAP_EXTERNAL externally sorts a list of items into ascending order.
• SWAPEC swaps diagonal edges until all triangles are Delaunay.
• TIMESTAMP prints the current YMDHMS date as a time stamp.
• TRIANGLE_ANGLES_2D computes the angles of a triangle in 2D.
• TRIANGLE_AREA_2D computes the area of a triangle in 2D.
• TRIANGLE_CIRCUMCENTER_2D computes the circumcenter of a triangle in 2D.
• TRIANGLE_ORDER3_PHYSICAL_TO_REFERENCE maps physical points to reference points.
• TRIANGLE_ORDER3_REFERENCE_TO_PHYSICAL maps reference points to physical points.
• TRIANGLE_ORDER6_PHYSICAL_TO_REFERENCE maps a physical point to a reference point.
• TRIANGLE_ORDER6_REFERENCE_TO_PHYSICAL maps reference points to physical points.
• TRIANGLE_REFERENCE_SAMPLE returns random points in the reference triangle.
• TRIANGLE_SAMPLE returns random points in a triangle.
• TRIANGULATION_DELAUNAY_DISCREPANCY reports if a triangulation is Delaunay.
• TRIANGULATION_ORDER3_NEIGHBOR_TRIANGLES determines triangle neighbors.
• TRIANGULATION_NODE_ORDER determines the order of nodes in a triangulation.
• TRIANGULATION_ORDER3_BOUNDARY_EDGE_COUNT counts the boundary edges.
• TRIANGULATION_ORDER3_BOUNDARY_EDGE_COUNT_EULER counts boundary edges.
• TRIANGULATION_ORDER3_BOUNDARY_NODE indicates nodes on the boundary.
• TRIANGULATION_ORDER3_CHECK makes some simple checks on a triangulation.
• TRIANGULATION_ORDER3_EDGE_CHECK checks the edges of a triangulation.
• TRIANGULATION_ORDER3_EXAMPLE1 sets up a sample triangulation.
• TRIANGULATION_ORDER3_EXAMPLE1_SIZE sets sizes for a sample triangulation.
• TRIANGULATION_ORDER3_EXAMPLE2 sets up a sample triangulation.
• TRIANGULATION_ORDER3_EXAMPLE2_SIZE sets sizes for a sample triangulation.
• TRIANGULATION_ORDER3_NEIGHBOR determines a neighbor of a given triangle.
• TRIANGULATION_ORDER3_NEIGHBOR_NODES determines node neighbors.
• TRIANGULATION_ORDER3_NEIGHBOR_NODES_PRINT prints a node neighbor array.
• TRIANGULATION_ORDER3_PLOT plots a triangulation of a set of nodes.
• TRIANGULATION_ORDER3_PRINT prints information defining a triangulation.
• TRIANGULATION_ORDER3_QUAD approximates an integral over a triangulation.
• TRIANGULATION_ORDER3_REFINE_COMPUTE computes a refined order 3 triangulation.
• TRIANGULATION_ORDER3_REFINE_SIZE sizes a refined order 3 triangulation.
• TRIANGULATION_ORDER3_SAMPLE returns random points in a triangulation.
• TRIANGULATION_ORDER4_PLOT plots a 4-node triangulation.
• TRIANGULATION_ORDER6_BOUNDARY_EDGE_COUNT counts the boundary edges.
• TRIANGULATION_ORDER6_BOUNDARY_EDGE_COUNT_EULER counts boundary edges.
• TRIANGULATION_ORDER6_BOUNDARY_NODE indicates nodes on the boundary.
• TRIANGULATION_ORDER6_EXAMPLE1 sets up a sample triangulation.
• TRIANGULATION_ORDER6_EXAMPLE1_SIZE sets sizes for a sample triangulation.
• TRIANGULATION_ORDER6_EXAMPLE2 sets up a sample triangulation.
• TRIANGULATION_ORDER6_EXAMPLE2_SIZE sets sizes for a sample triangulation.
• TRIANGULATION_ORDER6_NEIGHBOR determines a neighbor of a given triangle.
• TRIANGULATION_ORDER6_PLOT plots a 6-node triangulation of a set of nodes.
• TRIANGULATION_ORDER6_PRINT prints information defining a triangulation.
• TRIANGULATION_ORDER6_REFINE_COMPUTE computes a refined order 6 triangulation.
• TRIANGULATION_ORDER6_REFINE_SIZE sizes a refined order 6 triangulation.
• TRIANGULATION_ORDER6_TO_ORDER3 linearizes a quadratic triangulation.
• TRIANGULATION_ORDER6_VERTEX_COUNT counts vertex nodes in a triangulation.
• TRIANGULATION_SEARCH_DELAUNAY searches a triangulation for a point.
• TRIANGULATION_SEARCH_NAIVE naively searches a triangulation for a point.
• VBEDG determines which boundary edges are visible to a point.
• VORONOI_POLYGON_AREA computes the area of a Voronoi polygon.
• VORONOI_POLYGON_CENTROID_2D computes the centroid of a Voronoi polygon.
• VORONOI_POLYGON_VERTICES_2D computes the vertices of a Voronoi polygon.

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

Last revised 18 October 2012.