```
DRAW-RECT(2)                                         DRAW-RECT(2)

NAME
Rect - rectangular portion of the plane

SYNOPSIS
include   "draw.m";

{
min:      Point;
max:      Point;

canon:    fn(r: self Rect):             Rect;
dx:       fn(r: self Rect):             int;
dy:       fn(r: self Rect):             int;
eq:       fn(r: self Rect, s: Rect):    int;
Xrect:    fn(r: self Rect, s: Rect):    int;
inrect:   fn(r: self Rect, s: Rect):    int;
clip:     fn(r: self Rect, s: Rect):    (Rect, int);
combine:  fn(r: self Rect, s: Rect):    Rect;
contains: fn(r: self Rect, p: Point):   int;
addpt:    fn(r: self Rect, p: Point):   Rect;
subpt:    fn(r: self Rect, p: Point):   Rect;
inset:    fn(r: self Rect; n: int):     Rect;
};

DESCRIPTION
The type Rect defines a rectangular portion of the integer
grid.

min, max  These members define the upper left (min) and
lower right (max) points for the rectangle.  The
rectangle contains the pixels min.x _< x < max.x
and min.y _< y < max.y.  In general, Rect coordi-
nates should be in canonical form: min.x _< max.x
and min.y _< max.y.  Some functions give undefined
results if the input rectangles are not canonical.

r.canon() Returns a canonical rectangle by sorting the coor-
dinates of r.

r.dx()    Returns the horizontal dimension of r.

r.dy()    Returns the vertical dimension of r.

r.eq(s)   Returns non-zero if the rectangles r and s have
the same coordinates and zero otherwise.

r.Xrect(s)
Returns non-zero if the rectangles r and s

Page 1                       Plan 9             (printed 7/20/24)

DRAW-RECT(2)                                         DRAW-RECT(2)

intersect and zero otherwise.  Intersection means
the rectangles share at least one pixel; zero-
sized rectangles do not intersect.

r.inrect(s)
Returns non-zero if r is completely inside s and
zero otherwise.  Rectangles with equal coordinates
are considered to be inside each other.  Zero-
sized rectangles contain no rectangles.

r.clip(s) Computes the intersection between r and s. If the
input rectangles intersect, clip returns the
resulting rectangle and a non-zero integer value.
If the rectangles do not intersect, clip returns r
and a zero value.

r.combine(s)
Returns the smallest rectangle sufficient to cover
all the pixels of r and s.

r.contains(p)
Returns non-zero if the rectangle r contains the
pixel with the coordinates of p and zero other-
wise.  Zero-sized rectangles contain no points.

r.subpt(p)
Returns the rectangle (r.min.sub(p),
r.max.sub(p)).

r.inset(n)