| ADDPT(3) | ADDPT(3)

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 arguments: `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`)`.

Rectaddpt returns the Rectangle `Rect(add(`r`.min,` p`)`, `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 Rectangles.

Ptinrect returns 1 if p is a point within r, and 0 otherwise.

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 otherwise.

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 sufficient 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

| `/usr/local/plan9/src/libdraw`

SEE ALSO

| graphics(3)