M_PointSet
—
Agar-Math point set structures
#include <agar/core.h>
#include <agar/gui.h>
#include <agar/math/m.h>
The M_PointSet
family of structures
describe arbitrary sets of points in space. They are defined as follows:
/* Points in R^2 */
typedef struct m_point_set2 {
M_Vector2 *p;
Uint n, nMax;
} M_PointSet2;
/* Points in Z^2 */
typedef struct m_point_set2i {
M_Real w, h;
int *x, *y;
Uint n, nMax;
} M_PointSet2i;
/* Points in R^3 */
typedef struct m_point_set3 {
M_Vector3 *p;
Uint n, nMax;
} M_PointSet3;
/* Points in Z^3 */
typedef struct m_point_set3i {
M_Real w, h, d; /* Scaling factor */
int *x, *y, *z;
Uint n, nMax;
} M_PointSet3i;
The points in a M_PointSet[23] are stored
under the p array of vectors (see
M_Vector(3)).
The points in M_PointSet[23]i are stored as
separate arrays of integers x,
y, z. The
w, h and d
members specify scaling factors to use when converting from an integer set
to a real set.
void
M_PointSetInit2
(M_PointSet2
*S);
void
M_PointSetInit3
(M_PointSet3
*S);
void
M_PointSetInit2i
(M_PointSet2i
*S, M_Real w,
M_Real h);
void
M_PointSetInit3i
(M_PointSet3i
*S, M_Real w,
M_Real h,
M_Real d);
int
M_PointSetAlloc2
(M_PointSet2
*S, Uint n);
int
M_PointSetAlloc3
(M_PointSet3
*S, Uint n);
int
M_PointSetAlloc2i
(M_PointSet2i
*S, Uint n);
int
M_PointSetAlloc3i
(M_PointSet3i
*S, Uint n);
void
M_PointSetFree2
(M_PointSet2
*S);
void
M_PointSetFree3
(M_PointSet3
*S);
void
M_PointSetFree2i
(M_PointSet2i
*S);
void
M_PointSetFree3i
(M_PointSet2i
*S);
M_PointSet2
M_PointSetRead2
(AG_DataSource
*ds);
void
M_PointSetWrite2
(AG_DataSource
*ds, const M_PointSet2
*S);
M_PointSet3
M_PointSetRead3
(AG_DataSource
*ds);
void
M_PointSetWrite3
(AG_DataSource
*ds, const M_PointSet3
*S);
M_PointSet2i
M_PointSetRead2i
(AG_DataSource
*ds);
void
M_PointSetWrite2i
(AG_DataSource
*ds, const M_PointSet2i
*S);
M_PointSet3i
M_PointSetRead3i
(AG_DataSource
*ds);
void
M_PointSetWrite3i
(AG_DataSource
*ds, const M_PointSet3i
*S);
M_PointSet2
M_POINT_SET2_EMPTY
(void);
M_PointSet3
M_POINT_SET3_EMPTY
(void);
M_PointSet2i
M_POINT_SET2I_EMPTY
(void);
M_PointSet3i
M_POINT_SET3I_EMPTY
(void);
The
M_PointSetInit[23]
()
functions initialize a point set in R^2 or R^3 to the null set.
The
M_PointSetInit[23]i
()
functions initialize a point set in Z^3 or Z^3 to the null set. The
w, h, d
arguments specify the scaling factor to use when converting from an integer
to a real point set.
The
M_PointSetAlloc*
()
functions allocates memory for the specified number of points, returning 0
on success or -1 if insufficient memory is available.
The
M_PointSetFree*
()
functions free the point sets, clearing the arrays and reinitializing the
point count to 0.
The
M_PointSetRead*
()
and
M_TriangleWrite*
()
functions read or write a triangle structure from/to an
AG_DataSource(3).
The macros
M_POINT_SET*_EMPTY
()
expand to static initializers for any of the
M_PointSet
structures.
int
M_PointSetAdd2
(M_PointSet2
*S, M_Vector2
v);
int
M_PointSetAdd3
(M_PointSet3
*S, M_Vector3
v);
int
M_PointSetAdd2i
(M_PointSet2
*S, int x,
int y);
int
M_PointSetAdd3i
(M_PointSet3i
*S, int x,
int y,
int z);
int
M_PointSetCopy2
(M_PointSet2
*D, const M_PointSet2
*S);
int
M_PointSetCopy3
(M_PointSet3
*D, const M_PointSet3
*S);
int
M_PointSetCopy2i
(M_PointSet2i
*D, const M_PointSet2i
*S);
int
M_PointSetCopy3i
(M_PointSet3i
*D, const M_PointSet3i
*S);
void
M_PointSetSort2
(M_PointSet2
*S, enum
m_point_set_sort_mode2);
void
M_PointSetSort3
(M_PointSet3
*S, enum
m_point_set_sort_mode3);
The
M_PointSetAdd*
()
functions insert a new point at the end of the set S.
On success, the index of the new point is returned. If insufficient memory
is available, -1 is returned.
The
M_PointSetCopy*
()
functions copy the contents of source set S into
destination set D, returning 0 on success or -1 if
insufficient memory is available.
The
M_PointSetSort[23]
()
functions sort the point sets by point coordinate. The
mode arguments specify the sorting mode:
enum m_point_set_sort_mode2 {
M_POINT_SET_SORT_XY,
M_POINT_SET_SORT_YX,
};
enum m_point_set_sort_mode3 {
M_POINT_SET_SORT_XYZ,
M_POINT_SET_SORT_XZY,
M_POINT_SET_SORT_YXZ,
M_POINT_SET_SORT_YZX,
M_POINT_SET_SORT_ZXY,
M_POINT_SET_SORT_ZYX,
};
The M_PointSet
family of structures first
appeared in Agar 1.4.2.