TRIANGULATION
Triangulation of 2D data
TRIANGULATION is a MATLAB 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.
Routines are available to
-
evaluate "quality measures" for the triangulation;
-
create a "node neighbor array" for each node;
-
create a "triangle neighbor array" for each triangle;
-
estimate the integral of a function over a triangulation;
-
plot the nodes and triangles of a triangulation;
-
determine the parts of the triangulation that lie on the boundary;
-
sample points at random from the total triangulated region;
-
search a triangulation to determine which triangle 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.
Related Data and Programs:
CVT_TRIANGULATION
is a FORTRAN90 partial program,
which uses routines from the TEST_TRIANGULATION library
to create a CVT-based triangularization.
DISTMESH
is 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.
DUNAVANT
is a MATLAB library of routines
for defining Dunavant rules for quadrature
on a triangle.
FEKETE
is a MATLAB library of routines for defining
a Fekete rule for quadrature or interpolation over a triangle.
FEM_SAMPLE
is a MATLAB library of routines
for evaluating a finite element function defined on an order 3
or order 6 triangulation.
HEX_GRID_TRIANGULATE
is an executable FORTRAN90 program which
uses this library of test regions and computes points on a hexagonal grid
inside each region.
MESH_BANDWIDTH
is an executable MATLAB program
which returns the geometric bandwidth associated with a mesh of
elements of any order and in a space of arbitrary dimension.
NCC_TRIANGLE
is a MATLAB library defining Newton-Cotes closed quadrature
rules on a triangle.
NCO_TRIANGLE
is a MATLAB library defining Newton-Cotes open quadrature
rules on a triangle.
QUADRATURE_RULES_TRI
is a collection of files defining quadrature rules to be applied
to triangular regions.
STROUD
is a MATLAB library of routines which includes
some quadrature rules for triangles.
TABLE_DELAUNAY
is an executable FORTRAN90 program
for the triangulation of a set of nodes whose coordinates are
stored in a file.
TEST_TRI_INT
is a FORTRAN90 library of functions that can be used to test algorithms
for quadrature over a triangle.
TEST_TRIANGULATION
is a FORTRAN90 library of routines which can set up a number
of triangulation test problems.
TOMS612
is a FORTRAN77 library of routines which can estimate
the integral of a function over a triangle.
TOMS706
is a FORTRAN77 library which estimates the integral of a function
over a triangulated region.
TRIANGLE
is an executable C program which
computes a triangulation of a geometric region.
TRIANGULATION is available in
a C++ version and
a FORTRAN90 version and
a MATLAB version.
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 an executable MATLAB program
that reads data defining a triangulation, makes sure that
every triangle has positive orientation, and if not, writes a
corrected triangle file.
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.
WANDZURA
is a MATLAB library of routines
for defining Wandzura rules for quadrature
on a triangle.
Reference:
-
Franz Aurenhammer,
Voronoi diagrams -
a study of a fundamental geometric data structure,
ACM Computing Surveys,
Volume 23, Number 3, September 1991, pages 345-405.
-
Paul Bratley, Bennett Fox, Linus Schrage,
A Guide to Simulation,
Second Edition,
Springer, 1987,
ISBN: 0387964673.
-
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.
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:
-
alpha_measure.m,
measures the triangulated point set quality measure ALPHA.
-
angle_rad_2d.m,
returns the angle swept out by two rays in 2D;
-
arc_cosine.m,
computes the inverse cosine of C;
-
area_measure.m,
measures the triangulated point set area ratio quality measure.
-
bandwidth.m,
determines the bandwidth associated with the finite element mesh;
-
diaedg.m,
chooses a diagonal edge;
-
get_seed.m,
chooses an arbitrary seed for the random number generator;
-
i4_modp.m,
returns the nonnegative remainder of I4 division;
-
i4_sign.m,
returns the sign of an I4;
-
i4_swap.m,
swaps two I4's;
-
i4_uniform.m,
returns a random I4 in a given range;
-
i4_wrap.m,
forces an I4 to lie in a given range;
-
i4col_compare.m,
compares two columns of an I4COL;
-
i4col_sort_a.m,
ascending sorts the columns of an I4COL;
-
i4col_sorted_unique_count.m,
counts the unique columns in a sorted I4COL;
-
i4col_swap.m,
swaps two columns of an I4COL;
-
i4i4_sort_a.m,
ascending sorts a pair of I4's;
-
i4mat_transpose_print.m,
prints an I4MAT, transposed;
-
i4mat_transpose_print_some.m,
prints some of an I4MAT, transposed;
-
i4vec_heap_d.m,
reorders an I4VEC into a descending heap;
-
i4vec_indicator.m,
sets an I4VEC to the indicator vector;
-
i4vec_print.m,
prints an I4VEC;
-
i4vec_sort_heap_a.m,
ascending sorts an I4VEC using heap sort;
-
i4vec_sorted_unique.m,
returns the unique elements in a sorted I4VEC;
-
i4vec2_compare.m,
compares pairs of elements in an I4VEC2;
-
i4vec_sorta.m,
ascending sorts an I4VEC2;
-
i4vec2_sorted_unique.m,
returns the unique elements in a sorted I4VEC2;
-
lrline.m,
determines if a point is left or right of a directed line;
-
lvec_print.m,
prints an LVEC.
-
node_merge.m,
detects nodes that should be merged.
-
ns_adj_col_set.m,
sets up the column vector associated with the sparse compressed
column storage of the variable adjacencies in a Taylor-Hood
order 3/order 6 triangulation for Navier Stokes velocity and pressure.
-
ns_adj_count.m,
counts the variable adjacencies in a Taylor-Hood order 3/order 6
triangulation for Navier Stokes velocity and pressure.
-
ns_adj_insert.m,
inserts an adjacency into a compressed column adjacency matrix.
-
ns_adj_row_set.m,
sets the Navier Stokes sparse compressed column row indices.
-
perm_check.m,
checks that a permutation is valid;
-
perm_inverse.m,
computes the inverse of a permutation;
-
points_delaunay_naive_2d.m,
a "naive" algorithm for computing the Delaunay triangulation
of a set of points in 2D;
-
points_hull_2d.m,
computes the convex hull of a set of points in 2D;
-
points_point_near_naive_nd.m,
finds the nearest of a set of points to a point in ND;
-
q_measure.m,
measures the triangulated point set quality measure Q.
-
r4_uniform_01.m,
returns a random R4 in [0,1];
-
r8_epsilon.m,
returns the machine precision for R8's;
-
r8_huge.m,
returns a huge R8;
-
r8_uniform_01.m,
returns a random R8 in [0,1];
-
r82vec_permute.m,
permutes an R82VEC in place;
-
r82vec_sort_heap_index_a.m,
does an indexed heap ascending sort of an R82VEC;
-
r8mat_print.m,
prints an R8MAT;
-
r8mat_print_some.m,
prints some of an R8MAT;
-
r8mat_transpose_print.m,
prints the transpose of an R8MAT;
-
r8mat_transpose_print_some.m,
prints some of the transpose of an R8MAT;
-
r8tris2.m,
computes the Delaunay triangulation of a set of points in 2D;
-
r8vec_bracket.m,
searches a sorted R8VEC for brackets of a value;
-
s_len_trim.m,
returns the length of a string to the last nonblank;
-
sort_heap_external.m,
externally sorts a list of values into ascending order;
-
swapec.m,
swaps diagonal edges until all triangles are Delaunay;
-
timestamp.m,
prints the current YMDHMS date as a timestamp;
-
timestring.m,
returns the current YMDHMS date as a string;
-
triangle_area_2d.m,
returns the area of a triangle in 2D;
-
triangle_circumcenter_2d.m,
returns the circumcenter of a triangle in 2D;
-
triangle_reference_sample.m,
randomly samples a point from the reference triangle;
-
triangle_sample.m,
randomly samples a point from a triangle;
-
triangulation_node_order.m,
determines the order of the nodes in a triangulation;
-
triangulation_order3_adj_count.m,
counts adjacencies in an order 3 triangulation;
-
triangulation_order3_adj_set.m,
records adjacencies in an order 3 triangulation;
-
triangulation_order3_adj_set2.m,
records adjacencies in an order 3 triangulation;
-
triangulation_order3_boundary_edge_count.m,
determines the number of boundary edges in an order 3 triangulation;
-
triangulation_order3_boundary_edge_count_euler.m,
uses Euler's formula to determine the number of boundary edges
in an order 3 triangulation;
-
triangulation_order3_boundary_node.m,
determines the boundary nodes in an order 3 triangulation;
-
triangulation_order3_check.m,
carries out some simple checks on an order 3 triangulation;
-
triangulation_order3_edge_check.m,
checks the edges of an order 3 triangulation;
-
triangulation_order3_example1.m,
returns an example order 3 triangulation;
-
triangulation_order3_example_size.m,
returns the sizes of arrays in an example order 3 triangulation;
-
triangulation_order3_example.m,
returns an example order 3 triangulation;
-
triangulation_order3_example_size.m,
returns the sizes of arrays in an example order 3 triangulation;
-
triangulation_order3_neighhbor.m,
determines a neighbor of a given triangle in an order 3 triangulation;
-
triangulation_order3_neighhbor_nodes.m,
determines the neighbors of nodes in an order 3 triangulation;
-
triangulation_order3_neighhbor_nodes_print.m,
prints information about an order 3 triangulation neighbor nodes;
-
triangulation_order3_neighhbor_triangles.m,
determines triangle neighbors in an order 3 triangulation;
-
triangulation_order3_plot.m,
creates a EPS image of an order 3 triangulation;
-
triangulation_order3_print.m,
prints information about an order 3 triangulation;
-
triangulation_order3_refine_compute.m,
computes a refinement of an order3 mesh
-
triangulation_order3_refine_size.m,
sizes a refinement of an order3 mesh;
-
triangulation_order3_sample.m,
returns random points in an order 3 triangulation;
-
triangulation_order6_adj_count.m,
counts adjacencies in an order 6 triangulation;
-
triangulation_order6_adj_set.m,
records adjacencies in an order 6 triangulation;
-
triangulation_order6_boundary_edge_count.m,
determines the number of boundary edges in an order 6 triangulation;
-
triangulation_order6_boundary_edge_count_euler.m,
uses Euler's formula to determine the number of boundary edges
in an order 6 triangulation;
-
triangulation_order6_boundary_node.m,
determines the boundary nodes in an order 6 triangulation;
-
triangulation_order6_example1.m,
returns an example order 6 triangulation;
-
triangulation_order6_example1_size.m,
returns the sizes of arrays in an example order 6 triangulation;
-
triangulation_order6_example2.m,
returns an example order 6 triangulation;
-
triangulation_order6_example2_size.m,
returns the sizes of arrays in an example order 6 triangulation;
-
triangulation_order6_neighhbor.m,
determines a neighbor of a given triangle in an order 6 triangulation;
-
triangulation_order6_neighhbor_triangles.m,
determines triangle neighbors in an order 6 triangulation;
-
triangulation_order6_plot.m,
creates a EPS image of an order 6 triangulation;
-
triangulation_order6_print.m,
prints information about an order 6 triangulation;
-
triangulation_order6_refine_compute.m,
computes a refinement of an order6 mesh
-
triangulation_order6_refine_size.m,
sizes a refinement of an order6 mesh;
-
triangulation_order6_to_order3.m,
converts an order 6 triangulation to an order 3 triangulation;
-
triangulation_order6_vertex_count.m,
counts the number of vertex and midside nodes in an
order 6 triangulation;
-
triangulation_quad.m,
approximates the integral of a function over
a triangulated region.
-
triangulation_search.m,
finds the triangle containing a point, using a Delaunay search;
-
triangulation_search_naive.m,
finds the triangle containing a point, using a naive search;
-
vbedg.m,
determines which boundary edges are visible to a point;
-
voronoi_polygon_area.m,
computes the area of a Voronoi polygon.
-
voronoi_polygon_centroid.m,
computes the centroid of a Voronoi polygon.
-
voronoi_polygon_vertices.m,
computes the vertices of a Voronoi polygon.
Examples and Tests:
-
triangulation_test.m,
calls all the other test routines;
-
triangulation_test.out,
output from a run of the test routines;
-
triangulation_test01.m,
tests ALPHA_MEASURE;
-
triangulation_test02.m,
tests AREA_MEASURE;
-
triangulation_test03.m,
tests NODE_MERGE;
-
triangulation_test04.m,
tests NS_ADJ_COL_SET, NS_ADJ_COUNT and NS_ADJ_ROW_SET;
-
triangulation_test05.m,
tests POINTS_DELAUNAY_NAIVE_2D;
-
triangulation_test06.m,
tests POINTS_HULL_2D;
-
triangulation_test07.m,
tests Q_MEASURE;
-
triangulation_test08.m,
tests R8TRIS2;
-
triangulation_test09.m,
tests TRIANGLE_ORDER3_PHYSICAL_TO_REFERENCE,
TRIANGLE_ORDER3_REFERENCE_TO_PHYSICAL;
-
triangulation_test10.m,
tests TRIANGLE_ORDER6_PHYSICAL_TO_REFERENCE,
TRIANGLE_ORDER6_REFERENCE_TO_PHYSICAL;
-
triangulation_test11.m,
tests TRIANGULATION_NODE_ORDER;
-
triangulation_test12.m,
tests TRIANGULATION_ORDER3_ADJ_COUNT and TRIANGULATION_ORDER3_ADJ_SET;
-
triangulation_test125.m,
tests TRIANGULATION_ORDER3_ADJ_COUNT and TRIANGULATION_ORDER3_ADJ_SET2;
-
triangulation_test13.m,
tests TRIANGULATION_ORDER3_BOUNDARY_EDGE_COUNT and
TRIANGULATION_ORDER3_PLOT.
-
triangulation_test14.m,
tests TRIANGULATION_ORDER3_BOUNDARY_EDGE_COUNT_EULER;
-
triangulation_test15.m,
tests TRIANGULATION_ORDER3_BOUNDARY_NODE;
-
triangulation_test16.m,
tests TRIANGULATION_ORDER3_CHECK;
-
triangulation_test17.m,
tests TRIANGULATION_ORDER3_EXAMPLE1 and TRIANGULATION_ORDER3_EXAMPLE1_SIZE;
-
triangulation_test18.m,
tests TRIANGULATION_ORDER3_NEIGHBOR;
-
triangulation_test19.m,
tests TRIANGULATION_ORDER3_NEIGHBOR_TRIANGLES.
-
triangulation_test20.m,
tests TRIANGULATION_ORDER3_PLOT;
-
triangulation_test21.m,
tests TRIANGULATION_ORDER3_PRINT;
-
triangulation_test215.m,
tests TRIANGULATION_ORDER3_REFINE_COMPUTE and
TRIANGULATION_ORDER3_REFINE_SIZE;
-
triangulation_test22.m,
tests TRIANGULATION_ORDER6_ADJ_COUNT and TRIANGULATION_ORDER6_ADJ_SET;
-
triangulation_test23.m,
tests TRIANGULATION_ORDER6_BOUNDARY_EDGE_COUNT..
-
triangulation_test24.m,
tests TRIANGULATION_ORDER6_BOUNDARY_EDGE_COUNT_EULER;
-
triangulation_test25.m,
tests TRIANGULATION_ORDER6_BOUNDARY_NODE and TRIANGULATION_ORDER6_PLOT.
-
triangulation_test26.m,
tests TRIANGULATION_ORDER6_PRINT;
-
triangulation_test265.m,
tests TRIANGULATION_ORDER3_REFINE_COMPUTE and
TRIANGULATION_ORDER3_REFINE_SIZE;
-
triangulation_test27.m,
tests TRIANGULATION_ORDER6_VERTEX_COUNT;
-
triangulation_test28.m,
tests TRIANGULATION_QUAD;
-
quad_fun.m,
a sample integrand function for TRIANGULATION_QUAD;
-
triangulation_test29.m,
tests TRIANGULATION_SEARCH.
-
triangulation_test30.m,
tests TRIANGULATION_SEARCH and TRIANGULATION_SEARCH_NAIVE.
-
triangulation_test31.m,
tests VORONOI_POLYGON_AREA;
-
triangulation_test32.m,
tests VORONOI_POLYGON_CENTROID;
-
triangulation_test33.m,
tests VORONOI_POLYGON_VERTICES;
-
ns_triangulation.png,
a PNG image of
a "tiny" triangulation used for the Navier-Stokes examples.
-
triangulation_order3_plot.png,
a PNG image of
a triangulation.
-
triangulation_order3_plot2.png,
a PNG image of
a triangulation.
-
triangulation_order6_plot.png,
a PNG image of
a triangulation.
You can go up one level to
the MATLAB source codes.
Last revised 15 July 2007.