Polygon triangulation

From wiki.gis.com
Jump to: navigation, search

In computational geometry, polygon triangulation is the decomposition of a polygon into a set of triangles.

A triangulation of a polygon P is its partition into non-overlapping triangles whose union is P. In the strictest sense, these triangles may have vertices only at the vertices of P. In a less strict sense, points can be added anywhere on or inside the polygon to serve as vertices of triangles.

Triangulations are special cases of planar straight-line graphs.

A convex polygon is trivial to triangulate in linear time, by adding edges from one vertex to all other vertices. In fact, Bernard Chazelle showed in 1991 that any simple polygon can be triangulated in linear time. The proposed algorithm is very complex though, so Chazelle and others are still looking for easier algorithms.

Subtracting ears method

A polygon ear

One way to triangulate a simple polygon is by using the assertion that any simple polygon without holes has at least two so called 'ears'. An ear is a triangle with two sides on the edge of the polygon and the other one completely inside it. The algorithm then consists of finding such an ear, removing it from the polygon (which results in a new polygon that still meets the conditions) and repeating until there is only one triangle left.

This algorithm is easy to implement, but suboptimal, and it only works on polygons without holes. An implementation that keeps separate lists of convex and reflex vertices will run in O(n2) time. This method is also known as ear clipping and sometimes ear trimming.

Using monotone polygons

Breaking a polygon into monotone polygons

A monotone polygon is one with a boundary that consists of two parts, each of which consists of points that have incrementing coordinates in one dimension. Such a polygon can easily be triangulated in linear time as described by A. Fournier and D.Y. Montuno.

To break up a simple polygon into monotone polygons, follow these steps:

For each point, check if the vertices are both on the same side of the 'sweep line', a horizontal or vertical line. If they are, check the next sweep line on the other side. Break the polygon on the line between the original point and one of the points on this one.

Note that if you are moving downwards, the points where both of the vertices are below the sweep line are 'split points'. They mark a split in the polygon. From there you have to consider both sides separately.

Using this algorithm to triangulate a simple polygon takes O(n log n) time.

See also

  • Catalan number