```

NAME
addpt, subpt, mulpt, divpt, rectaddpt, rectsubpt, insetrect,
canonrect, eqpt, eqrect, ptinrect, rectinrect, rectXrect,
rectclip, combinerect, Dx, Dy, Pt, Rect, Rpt - arithmetic on
points and rectangles

SYNOPSIS
#include <u.h>
#include <libc.h>
#include <draw.h>

Point     addpt(Point p, Point q)

Point     subpt(Point p, Point q)

Point     mulpt(Point p, int a)

Point     divpt(Point p, int a)

Rectangle rectaddpt(Rectangle r, Point p)

Rectangle rectsubpt(Rectangle r, Point p)

Rectangle insetrect(Rectangle r, int n)

Rectangle canonrect(Rectangle r)

int       eqpt(Point p, Point q)

int       eqrect(Rectangle r, Rectangle s)

int       ptinrect(Point p, Rectangle r)

int       rectinrect(Rectangle r, Rectangle s)

int       rectXrect(Rectangle r, Rectangle s)

int       rectclip(Rectangle *rp, Rectangle b)

void      combinerect(Rectangle *rp, Rectangle b)

int       Dx(Rectangle r)

int       Dy(Rectangle r)

Point     Pt(int x, int y)

Rectangle Rect(int x0, int y0, int x1, int y1)

Rectangle Rpt(Point p, Point q)

DESCRIPTION
The functions Pt, Rect and Rpt construct geometrical data
types from their components.

Addpt returns the Point sum of its arguments: Pt(p.x+q.x,
p.y+q.y).  Subpt returns the Point difference of its argu-
ments: Pt(p.x-q.x, p.y-q.y).  Mulpt returns the Point
Pt(p.x*a, p.y*a).  Divpt returns the Point Pt(p.x/a, p.y/a).

add(r.max, p)); rectsubpt returns the Rectangle
Rpt(sub(r.min, p), sub(r.max, p)).

Insetrect returns the Rectangle Rect(r.min.x+n, r.min.y+n,
r.max.x-n, r.max.y-n).

Canonrect returns a rectangle with the same extent as r,
canonicalized so that min.x ≤ max.x, and min.y ≤ max.y.

Eqpt compares its argument Points and returns 0 if unequal,
1 if equal.  Eqrect does the same for its argument Rectan-
gles.

Ptinrect returns 1 if p is a point within r, and 0 other-
wise.

Rectinrect returns 1 if all the pixels in r are also in s,
and 0 otherwise.

RectXrect returns 1 if r and s share any point, and 0 other-
wise.

Rectclip clips in place the Rectangle pointed to by rp so
that it is completely contained within b. The return value
is 1 if any part of *rp is within b. Otherwise, the return
value is 0 and *rp is unchanged.

Combinerect overwrites *rp with the smallest rectangle suf-
ficient to cover all the pixels of *rp and b.

The functions Dx and Dy give the width (Δx) and height (Δy)
of a Rectangle.  They are implemented as macros.

SOURCE
/sys/src/libdraw