POLYGON_PROPERTIES 
 Compute Properties of an Arbitrary Polygon
    
    
    
      POLYGON_PROPERTIES
      is a FORTRAN90 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 N-3 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.
    
    
      Related Data and Programs:
    
    
      
      GEOMETRY,
      a FORTRAN90 library which
      performs geometric calculations in 2, 3 and N dimensional space.
    
    
      
      HYPERSPHERE_PROPERTIES,
      a FORTRAN90 library which
      carries out various operations for an M-dimensional 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 FORTRAN90 library which
      returns the exact value of the integral of any monomial
      over the interior of a polygon in 2D.
    
    
      
      POLYGON_MONTE_CARLO,
      a FORTRAN90 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 FORTRAN90 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 FORTRAN90 program which
      computes properties of a given tetrahedron.
    
    
      
      TRIANGLE_PROPERTIES,
      a FORTRAN90 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 131-132.
         
        - 
          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: is a point 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_INTEGRAL_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.
        
 
        - 
          POLYGON_LATTICE_AREA computes the area of a lattice polygon.
        
 
        - 
          POLYGON_OUTRAD_DATA determines polygonal data from its outer radius.
        
 
        - 
          POLYGON_PERIMETER computes the perimeter of a polygon.
        
 
        - 
          POLYGON_PERIMETER_QUAD estimates an integral over the perimeter of a polygon.
        
 
        - 
          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_UNIFORM_01 returns a unit pseudorandom R8.
        
 
        - 
          R8MAT_SOLVE uses Gauss-Jordan 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_PRINT prints an R8VEC.
        
 
        - 
          R8VEC_UNIFORM_01 returns a unit pseudorandom R8VEC.
        
 
        - 
          SEGMENT_POINT_DIST: distance ( line segment, point ).
        
 
        - 
          SEGMENT_POINT_NEAR: nearest point on line segment to 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 FORTRAN90 source codes.
    
    
    
      Last revised on 19 October 2015.