Many functions in Agar accept AG_Rect
parameters. This structure describes a two-dimensional integer
rectangle:
typedef struct ag_rect {
int x, y;
int w, h;
} AG_Rect;
Normalized rectangles have non-negative w
and h. Rectangles are serialized using signed 16-bit
coordinates, and unsigned 16-bit sizes.
The AG_Rect2 variant includes a redundant
endpoint (or alternatively, a redundant size implied by the two endpoints).
This uses more space, but allows for faster intersection tests:
typedef struct ag_rect2 {
int x1, y1;
int w, h;
int x2, y2;
} AG_Rect2;
void
AG_RectInit
(AG_Rect
*rd, int x,
int y,
int w,
int h);
void
AG_Rect2Init
(AG_Rect2
*rd, int x,
int y,
int w,
int h);
void
AG_ReadRect
(AG_Rect
*rd, AG_DataSource
*ds);
void
AG_ReadRect2
(AG_Rect2
*rd, AG_DataSource
*ds);
void
AG_WriteRect
(AG_DataSource
*ds, const AG_Rect
*r);
void
AG_WriteRect2
(AG_DataSource
*ds, const AG_Rect2
*r);
void
AG_Rect2ToRect
(AG_Rect
*rd, AG_Rect2
r);
void
AG_RectToRect2
(AG_Rect2
*rd, AG_Rect
*r);
int
AG_RectIntersect
(AG_Rect
*rd, const AG_Rect
*a, const AG_Rect
*b);
int
AG_RectIntersect2
(AG_Rect2
*rd, const AG_Rect2
*a, const AG_Rect2
*b);
int
AG_RectInside
(const
AG_Rect *r, int x,
int y);
int
AG_RectInside2
(const
AG_Rect2 *r, int x,
int y);
int
AG_RectCompare
(const
AG_Rect *a, const AG_Rect
*b);
int
AG_RectCompare2
(const
AG_Rect2 *a, const
AG_Rect2 *b);
void
AG_RectSize
(AG_Rect
*r, int w,
int h);
void
AG_RectSize2
(AG_Rect2
*r, int w,
int h);
void
AG_RectTranslate
(AG_Rect
*r, int x,
int y);
void
AG_RectTranslate2
(AG_Rect2
*r, int x,
int y);
AG_RectInit
()
initializes an AG_Rect to coordinates
x, y and dimensions
w, h.
AG_Rect2Init
()
initializes an AG_Rect2 to coordinates and dimensions
and implicitely computes the endpoint x2,
y2.
The
AG_ReadRect
()
function loads a rectangle from the given
AG_DataSource(3).
AG_WriteRect
() writes a rectangle to a data
source.
AG_RectToRect2
()
and AG_Rect2ToRect
() convert between the
AG_Rect and AG_Rect2
formats.
AG_RectIntersect
()
and AG_RectIntersect2
() return intersection of
rectangles a and b.
AG_RectInside
()
and AG_RectInside2
() return 1 if the point
x, y lies inside of rectangle
r.
AG_RectCompare
()
and AG_RectCompare2
() return 0 if both rectangles
possess the same coordinates and dimensions.
AG_RectSize
()
and AG_RectSize2
() resize a rectangle to the
specified dimensions.
AG_RectTranslate
()
and AG_RectTranslate2
() translate a rectangle by the
specified amount.