POLYGON_PROPERTIES
Compute Properties of an Arbitrary Polygon
POLYGON_PROPERTIES
is a C++ library which
computes properties of an arbitrary polygon in the plane, defined
by a sequence of vertices, including

angles;

area;

centroid;

containment of a point;

diameter;

expand polygon outward by H;

inradius of regular polygon to area, outradius side length;

integral over polygon of 1, x, x^2, xy, y, y^2;

is polygon convex?;

lattice area;

outradius of regular polygon to area, inradius, side length;

perimeter;

point to polygon distance;

point to nearest point on polygon;

sampling uniformly;

side length of regular polygon to area, inradius, outradius;

triangulation (decomposition into N3 triangles).
Licensing:
The computer code and data files made available on this
web page are distributed under
the GNU LGPL license.
Languages:
POLYGON_PROPERTIES is available in
a C version and
a C++ version and
a FORTRAN90 version and
a MATLAB version and
a Python version.
Related Data and Programs:
GEOMETRY,
a C++ library which
performs geometric calculations in 2, 3 and N dimensional space.
HYPERSPHERE_PROPERTIES,
a C++ library which
carries out various operations for an Mdimensional hypersphere, including
converting between Cartesian and spherical coordinates,
stereographic projection, sampling the surface of the sphere, and
computing the surface area and volume.
POLYGON_INTEGRALS,
a C++ library which
returns the exact value of the integral of any monomial
over the interior of a polygon in 2D.
POLYGON_MONTE_CARLO,
a C++ library which
applies a Monte Carlo method to estimate the integral of a function
over the interior of a polygon in 2D.
POLYGON_TRIANGULATE,
a C++ library which
triangulates a possibly nonconvex polygon,
and which can use gnuplot to display the external edges and
internal diagonals of the triangulation.
TETRAHEDRON_PROPERTIES,
a C++ program which
computes properties of a given tetrahedron.
TRIANGLE_PROPERTIES,
a C++ program which
computes properties of a triangle whose vertex coordinates
are read from a file.
Reference:

Gerard Bashein, Paul Detmer,
Centroid of a Polygon,
in Graphics Gems IV,
edited by Paul Heckbert,
AP Professional, 1994,
ISBN: 0123361559,
LC: T385.G6974.

SF Bockman,
Generalizing the Formula for Areas of Polygons to Moments,
American Mathematical Society Monthly,
Volume 96, Number 2, February 1989, pages 131132.

Adrian Bowyer, John Woodwark,
A Programmer's Geometry,
Butterworths, 1983,
ISBN: 0408012420.

Peter Schorn, Frederick Fisher,
Testing the Convexity of a Polygon,
in Graphics Gems IV,
edited by Paul Heckbert,
AP Professional, 1994,
ISBN: 0123361559,
LC: T385.G6974.

Moshe Shimrat,
Algorithm 112:
Position of Point Relative to Polygon,
Communications of the ACM,
Volume 5, Number 8, August 1962, page 434.

Allen VanGelder,
Efficient Computation of Polygon Area and Polyhedron Volume,
in Graphics Gems V,
edited by Alan Paeth,
AP Professional, 1995,
ISBN: 0125434553,
LC: T385.G6975.
Source Code:
Examples and Tests:
List of Routines:

ANGLE_HALF finds half an angle.

ANGLE_RAD returns the angle in radians swept out between two rays.

BETWEEN is TRUE if vertex C is between vertices A and B.

COLLINEAR returns a measure of collinearity for three points.

DIAGONAL: VERTEX(IM1) to VERTEX(IP1) is a proper internal diagonal.

DIAGONALIE is true if VERTEX(IM1):VERTEX(IP1) is a proper diagonal.

I4_MODP returns the nonnegative remainder of I4 division.

I4_WRAP forces an I4 to lie between given limits by wrapping.

IN_CONE is TRUE if the diagonal VERTEX(IM1):VERTEX(IP1) is strictly internal.

INTERSECT is true if lines VA:VB and VC:VD intersect.

INTERSECT_PROP is TRUE if lines VA:VB and VC:VD have a proper intersection.

L4_XOR returns the exclusive OR of two L4's.

POLYGON_ANGLES computes the interior angles of a polygon.

POLYGON_AREA computes the area of a polygon.

POLYGON_AREA_2 computes the area of a polygon.

POLYGON_CENTROID computes the centroid of a polygon.

POLYGON_CENTROID_2 computes the centroid of a polygon.

POLYGON_CONTAINS_POINT finds if a point is inside a simple polygon .

POLYGON_CONTAINS_POINT_2 finds if a point is inside a convex polygon.

POLYGON_DIAMETER computes the diameter of a polygon.

POLYGON_EXPAND expands a polygon.

POLYGON_INRAD_DATA determines polygonal data from its inner radius.

POLYGON_INTEGRAL_1 integrates the function 1 over a polygon.

POLYGON_INTEGRAL_X integrates the function X over a polygon.

POLYGON_INTEGRAL_XX integrates the function X*X over a polygon.

POLYGON_INTEGRAL_XY integrates the function X*Y over a polygon.

POLYGON_Y integrates the function Y over a polygon.

POLYGON_INTEGRAL_YY integrates the function Y*Y over a polygon.

POLYGON_IS_CONVEX determines whether a polygon is convex in 2D.

POLYGON_LATTICE_AREA computes the area of a lattice polygon.

POLYGON_OUTRAD_DATA determines polygonal data from its outer radius.

POLYGON_POINT_DIST: distance ( polygon, point ).

POLYGON_POINT_NEAR computes the nearest point on a polygon.

POLYGON_SAMPLE uniformly samples a polygon.

POLYGON_SIDE_DATA determines polygonal data from its side length.

POLYGON_TRIANGULATE determines a triangulation of a polygon.

R8_DEGREES converts an angle from radian to degree measure.

R8_HUGE returns a "huge" R8.

R8_MAX returns the maximum of two R8's.

R8_MIN returns the minimum of two R8's.

R8_UNIFORM_01 returns a unit pseudorandom R8.

R8MAT_SOLVE uses GaussJordan elimination to solve an N by N linear system.

R8MAT_TRANSPOSE_PRINT prints an R8MAT, transposed.

R8MAT_TRANSPOSE_PRINT_SOME prints some of an R8MAT, transposed.

R8VEC_NORM returns the L2 norm of an R8VEC.

R8VEC_PRINT prints an R8VEC.

R8VEC_SUM returns the sum of an R8VEC.

R8VEC_UNIFORM_01_NEW returns a new unit pseudorandom R8VEC.

SEGMENT_POINT_DIST: distance ( line segment, point ).

SEGMENT_POINT_NEAR finds the point on a line segment nearest a point.

TIMESTAMP prints the current YMDHMS date as a time stamp.

TRIANGLE_AREA computes the signed area of a triangle.

TRIANGLE_BARYCENTRIC finds the barycentric coordinates of a point.

TRIANGLE_CONTAINS_POINT_1 finds if a point is inside a triangle.
You can go up one level to
the C++ source codes.
Last revised on 14 October 2015.