# `Geometry` submodule

The Geometry submodule provides a collection of functions for operating on points and rectangles. See the section on Coordinates, Points and Rectangles for a discussion of how these entities are defined.

## Point functions

`add_pt(`p1, p2`)`
  Returns the point resulting from adding the coordinates of points p1 and p2.

`sub_pt(`p1, p2`)`
  Returns the point resulting from subtracting the coordinates of point p2 from those of point p1.

## Rectangle functions

`rect_sized(`p, size`)`
  Returns a rectangle of the specified size with p as its top left corner.

`rect_left(`r`)`
`rect_top(`r`)`
`rect_right(`r`)`
`rect_bottom(`r`)`
  These functions return the left, top, right or bottom coordinate, respectively, of the given rectangle.

`rect_width(`r`)`
`rect_height(`r`)`
  These functions return the width or height, respectively, of the given rectangle.

`rect_topleft(`r`)`
`rect_botright(`r`)`
  These functions return the top left or bottom right point, respectively, of the given rectangle.

`rect_size(`r`)`
  Returns the size of the given rectangle.

`union_rect(`r1, r2)
  Returns the union of the rectangles r1 and r2, i.e. the smallest rectangle enclosing both r1 and r2.

`sect_rect(`r1, r2`)`
  Returns the intersection of rectangles r1 and r2.

`inset_rect(`r, `(`dx, dy`))`
  Returns the rectangle resulting from displacing the sides of the rectangle r inwards horizontally by dx and vertically by dy.

`offset_rect(`r, `(`dx, dy`)``)`
  Returns the rectangle resulting from displacing the rectangle r horizontally by dx and vertically by dy.

`empty_rect(`r`)`
  Returns true if r is an empty rectangle.

`pt_in_rect(`p, r`)`
  Returns true if the point p is in the rectangle r. A point is considered to be in a rectangle if the pixel immediately below and to the right of the point is enclosed by the rectangle.
rects_intersect(r1, r2)
  Returns true if the intersection of rectangles r1 and r2 is nonempty.

---