TH ADDPT 2
SH NAME
addpt, subpt, mulpt, divpt, rectaddpt, rectsubpt, insetrect, canonrect, eqpt, eqrect, ptinrect, rectinrect, rectXrect, rectclip, combinerect, badrect, Dx, Dy, Pt, Rect, Rpt \- arithmetic on points and rectangles
SH SYNOPSIS
B #include <u.h>
br
B #include <libc.h>
br
B #include <draw.h>
PP
B
Point   addpt(Point p, Point q)
PP
B
Point   subpt(Point p, Point q)
PP
B
Point   mulpt(Point p, int a)
PP
B
Point   divpt(Point p, int a)
PP
B
Rectangle       rectaddpt(Rectangle r, Point p)
PP
B
Rectangle       rectsubpt(Rectangle r, Point p)
PP
B
Rectangle       insetrect(Rectangle r, int n)
PP
B
Rectangle       canonrect(Rectangle r)
PP
B
int             eqpt(Point p, Point q)
PP
B
int             eqrect(Rectangle r, Rectangle s)
PP
B
int             ptinrect(Point p, Rectangle r)
PP
B
int             rectinrect(Rectangle r, Rectangle s)
PP
B
int             rectXrect(Rectangle r, Rectangle s)
PP
B
int             rectclip(Rectangle *rp, Rectangle b)
PP
B
void            combinerect(Rectangle *rp, Rectangle b)
PP
B
int             badrect(Rectangle r)
PP
B
int             Dx(Rectangle r)
PP
B
int             Dy(Rectangle r)
PP
B
Point   Pt(int x, int y)
PP
B
Rectangle       Rect(int x0, int y0, int x1, int y1)
PP
B
Rectangle       Rpt(Point p, Point q)
SH DESCRIPTION
The functions
IR Pt ,
I Rect
and
I Rpt
construct geometrical data types from their components.
PP
I Addpt
returns the Point
sum of its arguments:
BI Pt( p .x+ q .x,
IB p .y+ q .y) \f1.
I Subpt
returns the Point
difference of its arguments:
BI Pt( p .x- q .x,
IB p .y- q .y) \f1.
I Mulpt
returns the Point
BI Pt( p .x* a ,
IB p .y* a ) \f1.
I Divpt
returns the Point
BI Pt( p .x/ a ,
IB p .y/ a ) \f1.
PP
I Rectaddpt
returns the Rectangle
BI Rect(add( r .min,
IB p ) \f1,
BI add( r .max,
IB p )) \f1;
I rectsubpt
returns the Rectangle
BI Rpt(sub( r .min,
IB p ),
BI sub( r .max,
IB p ))\fR.
PP
I Insetrect
returns the Rectangle
BI Rect( r .min.x+ n \f1,
IB r .min.y+ n \f1,
IB r .max.x- n \f1,
IB r .max.y- n ) \f1.
PP
I Canonrect
returns a rectangle with the same extent as
IR r ,
canonicalized so that
B min.x

BR max.x ,
and
B min.y

BR max.y .
PP
I Eqpt
compares its argument Points and returns
0 if unequal,
1 if equal.
I Eqrect
does the same for its argument Rectangles.
PP
I Ptinrect
returns 1 if
I p
is a point within
IR r ,
and 0 otherwise.
PP
I Rectinrect
returns 1 if all the pixels in
I r
are also in
IR s ,
and 0 otherwise.
PP
I RectXrect
returns 1 if
I r
and
I s
share any point, and 0 otherwise.
PP
I Rectclip
clips in place
the Rectangle pointed to by
I rp
so that it is completely contained within
IR b .
The return value is 1 if any part of
RI * rp
is within
IR b .
Otherwise, the return value is 0 and
RI * rp
is unchanged.
PP
I Combinerect
overwrites
B *rp
with the smallest rectangle sufficient to cover all the pixels of
B *rp
and
BR b .
PP
I Badrect
returns 1 if
I r
is zero, negative size or insanely huge rectangle.
It returns 0 otherwise.
PP
The functions
I Dx
and
I Dy
give the width (Δx) and height (Δy) of a Rectangle.
They are implemented as macros.
SH SOURCE
B /sys/src/libdraw
SH SEE ALSO
IR graphics (2)