TRIANGULATION_ORIENT
Positively Orient Triangles {#triangulation_orient-positively-orient-triangles align="center"}
TRIANGULATION_ORIENT is a C++ program which reads a triangulation, and reorients each triangle that has a negative area. If at least one such triangle is encountered, the program writes out a new copy of the triangle file in which all the triangles have been correctly oriented.
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.
For many applications, including computer graphics and finite element computations, it is assumed that the triangles are described with a positive orientation. That is, the nodes are listed in clockwise order.
TRIANGULATION_ORIENT can check whether every triangle in a triangulation has positive orientation, and can "repair" the file if it finds one or more triangles with a negative orientation.
A misoriented order 3 triangle:
2
/|
/ |
/ |
/ |
/ |
1-----3
The corrected order 3 triangle:
3
/|
/ |
/ |
/ |
/ |
1-----2
A misoriented order 6 triangle:
2
/|
/ |
4 5
/ |
/ |
1--6--3
The corrected order 6 triangle:
3
/|
/ |
6 5
/ |
/ |
1--4--2
triangulation_orient prefix
where prefix is the common filename prefix:
- prefix_nodes.txt contains the node coordinates,
- prefix_elements.txt contains the element definitions.
- prefix_orient_elements.txt will contains the oriented element definitions.
The computer code and data files described and made available on this web page are distributed under the GNU LGPL license.
TRIANGULATION_ORIENT is available in a C++ version and a FORTRAN90 version and a MATLAB version.
TABLE, a data format which is used for the input and output files.
TABLE_DELAUNAY, a C++ program which computes the Delaunay triangulation of a set of points.
TRIANGLE, a C program which computes a triangulation of a geometric region.
TRIANGULATION, a C++ library which carries out various operations on order 3 ("linear") or order 6 ("quadratic") triangulations.
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_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_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.
- Franz Aurenhammer,
Voronoi diagrams - a study of a fundamental geometric data structure,
ACM Computing Surveys,
Volume 23, Number 3, September 1991, pages 345-405. - Marc deBerg, Marc Krevald, Mark Overmars, Otfried Schwarzkopf,
Computational Geometry,
Springer, 2000,
ISBN: 3-540-65620-0. - Barry Joe,
GEOMPACK - a software package for the generation of meshes using geometric algorithms,
Advances in Engineering Software,
Volume 13, Number 5, 1991, pages 325-331. - Albert Nijenhuis, Herbert Wilf,
Combinatorial Algorithms for Computers and Calculators,
Second Edition,
Academic Press, 1978,
ISBN: 0-12-519260-6,
LC: QA164.N54. - 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. - Joseph ORourke,
Computational Geometry,
Second Edition,
Cambridge, 1998,
ISBN: 0521649765,
LC: QA448.D38. - Per-Olof Persson, Gilbert Strang,
A Simple Mesh Generator in MATLAB,
SIAM Review,
Volume 46, Number 2, June 2004, pages 329-345.
- triangulation_orient.cpp, the source code.
P15 is a triangulation created by DISTMESH. Unfortunately, 512 of the triangles have a negative orientation. In this example, TRIANGULATION_ORIENT was used to reorient those triangles.
- p15_nodes.txt, a set of nodes.
- p15_elements.txt, a set of order 3 triangles.
- p15_orient_elements.txt, the set of order 3 triangles after TRIANGULATION_ORIENT has reoriented them.
- p15_output.txt, the printed output from the program.
- MAIN is the main program for TRIANGULATION_ORIENT.
- CH_CAP capitalizes a single character.
- CH_EQI is true if two characters are equal, disregarding case.
- CH_TO_DIGIT returns the integer value of a base 10 digit.
- FILE_COLUMN_COUNT counts the columns in the first line of a file.
- FILE_EXIST reports whether a file exists.
- FILE_ROW_COUNT counts the number of row records in a file.
- I4_MAX returns the maximum of two I4's.
- I4_MIN returns the minimum of two I4's.
- I4MAT_DATA_READ reads data from an I4MAT file.
- I4MAT_HEADER_READ reads the header from an I4MAT file.
- I4MAT_TRANSPOSE_PRINT_SOME prints some of an I4MAT, transposed.
- I4MAT_WRITE writes an I4MAT file with no header.
- R8MAT_DATA_READ reads the data from an R8MAT file.
- R8MAT_HEADER_READ reads the header from an R8MAT file.
- R8MAT_TRANSPOSE_PRINT_SOME prints some of an R8MAT, transposed.
- S_LEN_TRIM returns the length of a string to the last nonblank.
- S_TO_I4 reads an I4 from a string.
- S_TO_I4VEC reads an I4VEC from a string.
- S_TO_R8 reads an R8 from a string.
- S_TO_R8VEC reads an R8VEC from a string.
- S_WORD_COUNT counts the number of "words" in a string.
- TIMESTAMP prints the current YMDHMS date as a time stamp.
- TRIANGLE_AREA_2D computes the area of a triangle in 2D.
You can go up one level to the C++ source codes.
Last revised on 22 August 2009.