84 lines · 3.0 KB · Text
RawDownload
= Rect: rectangular portion of the plane     include   "draw.m";    draw := load Draw Draw->PATH;     Rect: adt    {      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;    }; The  type  Rect  defines a rectangular portion of the integergrid. min, max  These members define the upper left (min) and lower          right  (max) points for the rectangle.  The rectan‐          gle  contains  the  pixels  min.x ≤ x < max.x   and          min.y ≤ y < max.y.   In  general,  Rect coordinates          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  inter‐          sect  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 otherwise.          Zero-sized rectangles contain no points. r.addpt(p)          Returns the rectangle (r.min.add(p), r.max.add(p)). r.subpt(p)          Returns the rectangle (r.min.sub(p), r.max.sub(p)). r.inset(n)          Returns    the    rectangle   (r.min.add((n,   n)),          r.max.sub((n, n)).   The  result  will  not  be  in          canonical form if the inset amount is too large for          the rectangle.