# 2d axis aligned bounding box (AABB)

Header: cglm/aabb2d.h

Some convenient functions provided for AABB.

Definition of aabb:

cglm defines an aabb as a two dimensional array of vec2’s. The first element is the min point and the second one is the max point. If you have another type e.g. struct or even another representation then you must convert it before and after calling a cglm aabb2d function.

## Table of contents (click to go):

Macros:

1. `glm_aabb2d_size()`

Functions:

1. `glm_aabb2d_copy()`

2. `glm_aabb2d_zero()`

3. `glm_aabb2d_transform()`

4. `glm_aabb2d_merge()`

5. `glm_aabb2d_crop()`

6. `glm_aabb2d_crop_until()`

7. `glm_aabb2d_invalidate()`

8. `glm_aabb2d_isvalid()`

9. `glm_aabb2d_diag()`

10. `glm_aabb2d_sizev()`

11. `glm_aabb2d_radius()`

12. `glm_aabb2d_center()`

13. `glm_aabb2d_aabb()`

14. `glm_aabb2d_circle()`

15. `glm_aabb2d_point()`

16. `glm_aabb2d_contains()`

## Functions documentation

void glm_aabb2d_copy(vec2 aabb[2], vec2 dest[2])
  copy all members of [aabb] to [dest]
  Parameters:
    [in] aabb bounding box
    [out] dest destination

void glm_aabb2d_zero(vec2 aabb[2])
  makes all members of [aabb] 0.0f (zero)
  Parameters:
    [in, out] aabb bounding box

void glm_aabb2d_transform(vec2 aabb[2], mat3 m, vec2 dest[2])
  apply transform to Axis-Aligned Bounding Box
  Parameters:
    [in] aabb bounding box
    [in] m transform matrix
    [out] dest transformed bounding box

void glm_aabb2d_merge(vec2 aabb1[2], vec2 aabb2[2], vec2 dest[2])
  merges two AABB bounding box and creates new one

  two aabb must be in the same space

  Parameters:
    [in] aabb1 bounding box 1
    [in] aabb2 bounding box 2
    [out] dest merged bounding box

void glm_aabb2d_crop(vec2 aabb[2], vec2 cropAabb[2], vec2 dest[2])
  crops a bounding box with another one.

  this could be useful for getting a bbox which fits with view frustum and object bounding boxes. In this case you crop view frustum box with objects box

  Parameters:
    [in] aabb bounding box 1
    [in] cropAabb crop box
    [out] dest cropped bounding box

void glm_aabb2d_crop_until(vec2 aabb[2], vec2 cropAabb[2], vec2 clampAabb[2], vec2 dest[2])
  crops a bounding box with another one.

  this could be useful for getting a bbox which fits with view frustum and object bounding boxes. In this case you crop view frustum box with objects box

  Parameters:
    [in] aabb bounding box
    [in] cropAabb crop box
    [in] clampAabb minimum box
    [out] dest cropped bounding box

void glm_aabb2d_invalidate(vec2 aabb[2])
  invalidate AABB min and max values
  It fills max values with -FLT_MAX and min values with +FLT_MAX
  Parameters:
    [in, out] aabb bounding box

bool glm_aabb2d_isvalid(vec2 aabb[2])
  check if AABB is valid or not
  Parameters:
    [in] aabb bounding box
  Returns:

    returns true if aabb is valid otherwise false

float glm_aabb2d_diag(vec2 aabb[2])
  distance between min and max
  Parameters:
    [in] aabb bounding box
  Returns:

    distance between min - max

void glm_aabb2d_sizev(vec2 aabb[2], vec2 dest)
  size vector of aabb
  Parameters:
    [in] aabb bounding box
    [out] dest size vector
  Returns:

    size vector of aabb max - min

float glm_aabb2d_radius(vec2 aabb[2])
  radius of sphere which surrounds AABB
  Parameters:
    [in] aabb bounding box

void glm_aabb2d_center(vec2 aabb[2], vec2 dest)
  computes center point of AABB
  Parameters:
    [in] aabb bounding box
    [out] dest center of bounding box

bool glm_aabb2d_aabb(vec2 aabb[2], vec2 other[2])
  check if two AABB intersects
  Parameters:
    [in] aabb bounding box
    [out] other other bounding box

bool glm_aabb2d_circle(vec2 aabb[2], vec3 c)
  check if AABB intersects with sphere
  https://github.com/erich666/GraphicsGems/blob/master/gems/BoxSphere.c
  Solid Box - Solid Sphere test.
  Parameters:
    [in] aabb solid bounding box
    [out] c solid circle

bool glm_aabb2d_point(vec2 aabb[2], vec2 point)
  check if point is inside of AABB
  Parameters:
    [in] aabb bounding box
    [out] point point

bool glm_aabb2d_contains(vec2 aabb[2], vec2 other[2])
  check if AABB contains other AABB
  Parameters:
    [in] aabb bounding box
    [out] other other bounding box