| .TH ADDPT 3 |
| .SH 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 |
| .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 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 |
| 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 \*9/src/libdraw |
| .SH SEE ALSO |
| .IR graphics (3) |