M_GEOMETRY(3)

NAME
M_Geometry - Agar-Math geometrical structures

SYNOPSIS

    #include <agar/math.h>

DESCRIPTION
The Agar-Math library implements a number of algorithms and operations on related to geometrical structures. The following basic structures are defined, see their respective manual pages for more details:

M_Line(3)
    Line segment or ray in R^2 (M_Line2) or R^3 (M_Line3).
M_Circle(3)
    Circle in R^2 (M_Circle2) or R^3 (M_Circle3).
M_Sphere(3)
    Sphere in R^3.
M_Plane(3)
    Plane in R^3 (M_Plane).
M_Triangle(3)
    Triangle in R^2 (M_Triangle2) or R^3 (M_Triangle3).
M_Rectangle(3)
    Rectangle in R^2 (M_Rectangle2) or R^3 (M_Rectangle3).
M_Polygon(3)
    Polygon in R^2.
M_Polyhedron(3)
    Polyhedron in R^3.

GENERIC GEOMETRIC ENTITIES
A number of routines (e.g., computation of intersections) return sets of zero or more geometrical structures of different types, depending on the

The M_Geom2 structure defines a geometrical entity in R^2:

    typedef struct m_geom2 {
    	M_GeomType type;
    	union {
    		M_Vector2    point;
    		M_Line2      line;
    		M_Circle2    circle;
    		M_Triangle2  triangle;
    		M_Rectangle2 rectangle;
    		M_Polygon    polygon;
    	} g;
    } M_Geom2;

Similarly, M_Geom3 defines an entity in R^3:

    typedef struct m_geom3 {
    	M_GeomType type;
    	union {
    		M_Vector3    point;
    		M_Line3      line;
    		M_Circle3    circle;
    		M_Triangle3  triangle;
    		M_Rectangle3 rectangle;
    		M_Polygon    polygon;
    		M_Sphere     sphere;
    		M_Plane      plane;
    		M_Polyhedron polyhedron;
    	} g;
    } M_Geom3;

The type field can take on the following values:

M_NONE
    Undefined type
M_POINT
    An M_Vector2(3) or M_Vector3(3).
M_LINE
    An M_Line2(3) or M_Line3(3).
M_CIRCLE
    An M_Circle2(3) or M_Circle3(3).
M_POLYGON
    An M_Polygon(3).
M_TRIANGLE
    An M_Triangle2(3) or M_Triangle3(3).
M_RECTANGLE
    An M_Rectangle2(3) or M_Rectnagle3(3).
M_SPHERE
    An M_Sphere(3).
M_PLANE
    An M_Plane3(3).

GENERIC GEOMETRIC ENTITIES: SETS
Sets of generic geometric entities in R^2 are described by the structure:

    typedef struct m_geom_set2 {
    	M_Geom2 *g;
    	Uint n;
    } M_GeomSet2;

Similarly for R^3:

    typedef struct m_geom_set3 {
    	M_Geom3 *g;
    	Uint n;
    } M_GeomSet3;

The following routines allow the manipulation of these sets.

M_GeomSet2 M_GEOM_SET_EMPTY(void)

M_GeomSet3 M_GEOM_SET_EMPTY(void)

void M_GeomSetAdd2(M_GeomSet2 *S, const M_Geom2 *g)

void M_GeomSetAdd3(M_GeomSet3 *S, const M_Geom3 *g)

void M_GeomSetFree2(M_GeomSet2 *S)

void M_GeomSetFree3(M_GeomSet3 *S)

The M_GEOM_SET_EMPTY() macro is provided as a static initializer for M_GeomSet2 and M_GeomSet3.

The M_GeomSetAdd2() and M_GeomSetAdd3() functions insert a copy of the entity g into the geometric set S.

M_GeomSetFree2() and M_GeomSetFree3() release the resources allocated by a geometric set.

SEE ALSO
AG_Intro(3), M_Matrix(3), M_Real(3), M_Vector(3)

HISTORY
The M_Geometry structure first appeared in Agar 1.3.4.