TRIANGULATION_ORIENT
Positively Orient Triangles


TRIANGULATION_ORIENT is a MATLAB 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 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.

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
      

Usage:

triangulation_orient ( 'node_file', 'triangle_file' )
reads the triangulation described by the node file (containing node coordinates) and the triangle file (containing sets of 3 or 6 node indices), determines if any triangles need to be reoriented, and if so, writes out a corrected triangle file.

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 the format used for the input and output files.

TABLE_DELAUNAY is an executable FORTRAN90 program which computes 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 MATLAB library of routines for carrying out various operations on order 3 ("linear") or order 6 ("quadratic") triangulations.

TRIANGULATION_BOUNDARY_NODES is an executable MATLAB 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 MATLAB program that reads data defining a 3-node triangulation and generates midside nodes and writes out the corresponding 6-node triangulation.

TRIANGULATION_MASK is an executable MATLAB program, which takes an existing triangulation and deletes triangles and their corresponding nodes as requested by the user.

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

TRIANGULATION_PLOT is an executable MATLAB program that reads data defining a triangulation and creates a PostScript image of the nodes and triangles.

TRIANGULATION_Q2L is an executable MATLAB 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 MATLAB program that reads data defining a triangulation and computes a number of quality measures.

TRIANGULATION_RCM is an executable MATLAB 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 MATLAB 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 MATLAB 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, Number 5, 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.
  7. Per-Olof Persson, Gilbert Strang,
    A Simple Mesh Generator in MATLAB,
    SIAM Review,
    Volume 46, Number 2, June 2004, pages 329-345.

Tar File:

A GZIP'ed TAR file of the contents of this directory is available. This is only done as a convenience for users who want ALL the files, and don't want to download them individually. This is not a convenience for me, so don't be surprised if the tar file is somewhat out of date.

Source Code:

Examples and Tests:

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.

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


Last revised on 06 July 2008.