A Simple Mesh Generator in MATLAB

DISTMESH is a MATLAB program which generates and manipulates unstructured meshes in 2D, 3D and general ND, by Per-Olof Persson.

The code is relatively simple, and the user is able to define a variety of geometric shapes, and desired mesh densities.

DISTMESH can be a very quick and flexible means of computing a set of points in a region. However, keep in mind the following considerations:


[ p, t ] = distmesh_2d ( fd, fh, h, box, iteration_max, fixed );


DISTMESH is Copyright (C) 2004 Per-Olof Persson.

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

If you use DISTMESH in any program or publication, please acknowledge its authors by citing the reference.


DISTMESH is available in a MATLAB version.

Related Data and Programs:

DIST_PLOT, a MATLAB program which creates a color contour plot of the distance functions that are used by DISTMESH.

DISTMESH_3D, a MATLAB program which is a subset of the DISTMESH routines, exclusively for 3D problems.

MESH2D, a MATLAB library which can automatically create a triangular mesh for a given polygonal region, by Darren Engwirda.

POINT_MERGE, a MATLAB library which considers N points in M dimensional space, and counts or indexes the unique or "tolerably unique" items.

TABLE_IO, a MATLAB library which reads and writes files using the TABLE format; these routines are used by DISTMESH when creating some output files.

TABLE_MERGE, a MATLAB program which removes duplicate points from a TABLE file; it can also remove points that are "close" to each other;

TEST_TRIANGULATION, a MATLAB library which defines some test regions for triangulation.

TRIANGLE, a C program which computes a triangulation of a geometric region, by Jonathan Shewchuk.

TRIANGULATION_BOUNDARY_NODES, a MATLAB program which reads data defining a triangulation and determines which nodes lie on the boundary.

TRIANGULATION_DISPLAY_OPENGL, a C++ program which reads files defining a triangulation and displays an image using Open GL.

TRIANGULATION_L2Q, a MATLAB program which reads data defining a linear triangulation and adds midpoint nodes to create a quadratic triangulation.

TRIANGULATION_MASK, a MATLAB program which is compiled with a user routine that defines a region; it then reads data defining a triangulation and removes all triangles that are outside the region. This is one way to clean up an unconstrained Delaunay triangulation of a nonconvex region.

TRIANGULATION_ORDER3, a data directory which discusses order 3 triangulations; The node and triangle files output by DISTMESH are an example of such triangulations.

TRIANGULATION_ORIENT, a MATLAB program 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 program which plots a triangulation.

TRIANGULATION_RCM, a MATLAB program which reads data defining a triangulation, and uses the Reverse Cuthill McKee algorithm to reorder the nodes so as the reduce the bandwidth of the corresponding adjacency matrix. This can be very helpful for cases where the data is to be handled by a frontal technique, or treated as a banded linear system.

TRIANGULATION_REFINE, a MATLAB program which reads data defining a triangulation and creates a refinement of the triangulation by subdividing each triangle.


Per-Olof Persson.


  1. http://math.mit.edu/~persson/
    Per-Olof Persson's web site.
  2. Per-Olof Persson and Gilbert Strang,
    A Simple Mesh Generator in MATLAB,
    SIAM Review,
    Volume 46, Number 2, June 2004, pages 329-345.

Source Code:

Examples and Tests:

MESHDEMO_2D runs all the 2D tests:

P01 is the circle:

P02 is the circle with a hole:

P03 is the square with a circular hole:

P04 is the hexagon with a hexagonal hole:

P05 is the horn:

P06 is the superellipse:

P07 is the bicycle seat:

P08 is the holey pie slice:

P09 is Jeff Borggaard's square with two hexagonal holes:

P10 is the unit square, with uniform density.

P11 is the L-shaped region:

P12 is the John Shadid's H-shaped region:

P13 is the Sandia fork:

P14 is Marcus Garvie's Lake Alpha, with Beta Island:

P15 is Sangbum Kim's forward step region:

P16 is Kevin Pond's elbow, a quarter of a circular annulus:

P17 is a rectangular region with a Reuleaux triangle obstacle.

P18 is a dumbbell shape, two circles connected by a rectangular channel.

P19 is a triangle:

P20 is a rough draft of the first floor of ICAM's Wright House:

P21 is Zhu Wang's 3x3 square with a "quarter round" bite taken out.

P22 is Hans-Werner van Wyk's "Big C", which allows two portions of the region to be "physically close" although a path from one portion to the other must take the long way around.

P23 is Mike Schneier's unit square, with nonuniform density.

P24 is the outline of a hand, with nonuniform density.

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

Last revised on 18 January 2016.