M_Polygon
—
Agar-Math polygon structure
The M_Polygon structure describes a simple polygon. The
polygon may be convex or concave. Self-intersections and holes are not
allowed.
typedef struct m_polygon {
M_Vector2 *v; /* Vertices */
Uint n; /* Vertex count */
} M_Polygon;
void
M_PolygonInit
(M_Polygon
*P);
M_Polygon
M_POLYGON_INITIALIZER
(void);
void
M_PolygonFree
(M_Polygon
*P);
M_Polygon
M_PolygonFromPts
(Uint
n, const M_Vector2
*v);
M_Polygon
M_PolygonFromPointSet2
(const
M_PointSet2 *ps);
M_Polygon
M_PolygonFromPointSet2i
(const
M_PointSet2i *ps);
M_Polygon
M_PolygonFromLines
(Uint
n, const M_Line2
*L);
M_PointSet2
M_PolygonToPointSet2
(const
M_Polygon *P);
M_PointSet2i
M_PolygonToPointSet2i
(const
M_Polygon *P, M_Real
w, M_Real h);
M_Polygon
M_PolygonRead
(AG_DataSource
*ds);
void
M_PolygonWrite
(AG_DataSource
*ds, const M_Polygon
*P);
The M_PolygonInit
() function initializes a
M_Polygon structure. The
M_POLYGON_INITIALIZER
() macro may also be used as a
static initializer.
The M_PolygonFree
() function releases the
memory allocated for vertices.
The M_PolygonFromPts
() function returns a
polygon structure given an array of points. The
M_PolygonFromPointSet
() variant accepts a
M_PointSet2(3)
argument. M_PolygonFromLines
() returns a polygon
from an array of lines L. n is
the number of elements in the array.
The M_PolygonToPointSet2
() and
M_PolygonToPointSet2i
() routines convert a
M_Polygon
to a
M_PointSet2
or
M_PointSet2i
structure.
The M_PolygonRead
() and
M_PolygonWrite
() functions read or write a polygon
structure from/to an
AG_DataSource(3).
int
M_PolygonAddVertex
(M_Polygon
*P, M_Vector2 v);
int
M_PolygonAddLine
(M_Polygon
*P, M_Line2 L);
int
M_PolygonDelVertex
(M_Polygon
*P, int v);
int
M_PolygonCopy
(M_Polygon
*Pdst, const M_Polygon
*Psrc);
void
M_PolygonScale
(M_Polygon
*P, M_Real xScale,
M_Real yScale);
void
M_PolygonOffset
(M_Polygon
*P, M_Real xOffs,
M_Real yOffs);
int
M_PointInPolygon
(const
M_Polygon *P, M_Vector2
p);
int
M_PolygonIsConvex
(const
M_Polygon *P);
The M_PolygonAddVertex
() function adds a
new vertex to a polygon. Returns index of new vertex on success, -1 on
failure. The M_PolygonAddLine
() variant accepts a
M_Line(3)
argument instead of a vector.
M_PolygonDelVertex
() removes the vertex at
given index v.
The M_PolygonCopy
() function copies the
vertices of a source polygon Psrc to a destination
polygon Pdst. The destination structure does not need
to be initialized. Any existing vertices in Pdst will
be overwritten. The function returns 0 on success or -1 if insufficient
memory is available.
M_PolygonScale
() multiplies all vertices
of a polygon with the given scaling factors xScale,
yScale. M_PolygonOffset
()
translates all vertices against xOffs,
yOffs.
The M_PointInPolygon
() function returns 1
if the point p lies inside the polygon.
M_PolygonIsConvex
() returns 1 if the
polygon is convex.
AG_DataSource(3),
AG_Intro(3),
M_Circle(3),
M_Geometry(3),
M_Plane(3),
M_PointSet(3),
M_Polygon(3),
M_Rectangle(3),
M_Sphere(3),
M_Triangle(3),
M_Vector(3)
The M_Polygon
structure first appeared in Agar 1.3.4.