triangulation (original) (raw)
triangulation, a MATLAB code 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.
Licensing:
The computer code and data files made available on this web page are distributed under the MIT license
Languages:
triangulation is available ina C version anda C++ version anda FORTRAN90 version anda MATLAB version.
Related Data and Programs:
distmesh, a MATLAB code 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_bandwidth, a MATLAB code which returns the geometric bandwidth associated with a mesh of elements of any order and in a space of arbitrary dimension.
mesh2d, a MATLAB code which can automatically create a triangular mesh for a given polygonal region, by darren engwirda.
test_triangulation, a MATLAB code which can set up a number of triangulation test problems.
triangulation_boundary_edges, a MATLAB 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, a MATLAB code which reads data defining a triangulation, determines which nodes lie on the boundary, and writes their coordinates to a file.
triangulation_corner, a MATLAB code which patches triangulations so that no triangle has two sides on the boundary.
triangulation_delaunay_discrepancy, a MATLAB code which measures the amount by which a triangulation fails the local delaunay test;
triangulation_display, a MATLAB code which displays the nodes and elements of a triangulation on the MATLAB graphics screen;
triangulation_histogram, a MATLAB code which computes histograms of data over a triangulation.
triangulation_l2q, a MATLAB code which reads data defining a 3-node triangulation and generates midside nodes and writes out the corresponding 6-node triangulation.
triangulation_mask, a MATLAB code which takes an existing triangulation and deletes triangles and their corresponding nodes as requested by the user.
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 MATLAB 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, a MATLAB code that reads data defining a triangulation and creates a postscript image of the nodes and triangles.
triangulation_q2l, a MATLAB 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, a MATLAB code which estimates the integral of a function over a triangulated region.
triangulation_quality, a MATLAB code which reads data defining a triangulation and computes a number of quality measures.
triangulation_rcm, a MATLAB 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, a MATLAB 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_to_gmsh, a MATLAB code which reads a file of node coordinates and a file of elements defined by node indices, and creates a corresponding gmsh mesh file.
triangulation_triangle_neighbors, a MATLAB code which reads data defining a triangulation, determines the neighboring triangles of each triangle, and writes that information to a file.
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 Tessellations: 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.
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;
- area_measure.m, measures the triangulated point set area ratio quality measure.
- bandwidth.m, determines the bandwidth associated with the finite element mesh;
- delaunay_swap_test.m, chooses a diagonal edge;
- diaedg.m, chooses a diagonal edge;
- 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_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.
- <mesh%5Fbase%5Fone.m> adjusts a mesh to use 1-based indexing.
- <mesh%5Fbase%5Fzero.m> adjusts a mesh to use 0-based indexing.
- 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 of 1:N is valid;
- perm_check2.m, checks that a permutation of BASE:BASE+N-1 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.
- quad_convex_random.m, returns a random convex quadrilateral in the unit square.
- r4_uniform_01.m, returns a random R4 in [0,1];
- 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;
- <r8mat%5Funiform%5F01.m>, returns a unit pseudorandom 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;
- triangle_angles_2d.m, returns the angles of a triangle in 2D;
- 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_area.m returns the area of a triangulation.
- triangulation_areas.m returns the triangle areas in a triangulation.
- triangulation_delaunay_discrepancy_compute.m reports if a triangulation is Delaunay.
- triangulation_neighhbor_elements.m, determines element neighbors in a triangulation;
- 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_adjacency.m, sets the full adjacency matrix for 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_example1_size.m, returns the sizes of arrays in an example order 3 triangulation;
- triangulation_order3_example2.m, returns an example order 3 triangulation;
- triangulation_order3_example2_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_plot.m, creates a EPS image of an order 3 triangulation;
- triangulation_order3_print.m, prints information about an order 3 triangulation;
- triangulation_order3_quad.m, approximates the integral of a function over 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_order4_plot.m, creates a EPS image of an order 4 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_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_search_delaunay.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.
Last revised 09 April 2019.