1*7dd7cddfSDavid du Colombier #include "../lib9.h" 2*7dd7cddfSDavid du Colombier 3*7dd7cddfSDavid du Colombier #include "../libdraw/draw.h" 4*7dd7cddfSDavid du Colombier 5*7dd7cddfSDavid du Colombier Point 6*7dd7cddfSDavid du Colombier Pt(int x, int y) 7*7dd7cddfSDavid du Colombier { 8*7dd7cddfSDavid du Colombier Point p; 9*7dd7cddfSDavid du Colombier 10*7dd7cddfSDavid du Colombier p.x = x; 11*7dd7cddfSDavid du Colombier p.y = y; 12*7dd7cddfSDavid du Colombier return p; 13*7dd7cddfSDavid du Colombier } 14*7dd7cddfSDavid du Colombier 15*7dd7cddfSDavid du Colombier Rectangle 16*7dd7cddfSDavid du Colombier Rect(int x, int y, int bx, int by) 17*7dd7cddfSDavid du Colombier { 18*7dd7cddfSDavid du Colombier Rectangle r; 19*7dd7cddfSDavid du Colombier 20*7dd7cddfSDavid du Colombier r.min.x = x; 21*7dd7cddfSDavid du Colombier r.min.y = y; 22*7dd7cddfSDavid du Colombier r.max.x = bx; 23*7dd7cddfSDavid du Colombier r.max.y = by; 24*7dd7cddfSDavid du Colombier return r; 25*7dd7cddfSDavid du Colombier } 26*7dd7cddfSDavid du Colombier 27*7dd7cddfSDavid du Colombier Rectangle 28*7dd7cddfSDavid du Colombier Rpt(Point min, Point max) 29*7dd7cddfSDavid du Colombier { 30*7dd7cddfSDavid du Colombier Rectangle r; 31*7dd7cddfSDavid du Colombier 32*7dd7cddfSDavid du Colombier r.min = min; 33*7dd7cddfSDavid du Colombier r.max = max; 34*7dd7cddfSDavid du Colombier return r; 35*7dd7cddfSDavid du Colombier } 36*7dd7cddfSDavid du Colombier 37*7dd7cddfSDavid du Colombier Point 38*7dd7cddfSDavid du Colombier addpt(Point a, Point b) 39*7dd7cddfSDavid du Colombier { 40*7dd7cddfSDavid du Colombier a.x += b.x; 41*7dd7cddfSDavid du Colombier a.y += b.y; 42*7dd7cddfSDavid du Colombier return a; 43*7dd7cddfSDavid du Colombier } 44*7dd7cddfSDavid du Colombier 45*7dd7cddfSDavid du Colombier Point 46*7dd7cddfSDavid du Colombier subpt(Point a, Point b) 47*7dd7cddfSDavid du Colombier { 48*7dd7cddfSDavid du Colombier a.x -= b.x; 49*7dd7cddfSDavid du Colombier a.y -= b.y; 50*7dd7cddfSDavid du Colombier return a; 51*7dd7cddfSDavid du Colombier } 52*7dd7cddfSDavid du Colombier 53*7dd7cddfSDavid du Colombier Rectangle 54*7dd7cddfSDavid du Colombier insetrect(Rectangle r, int n) 55*7dd7cddfSDavid du Colombier { 56*7dd7cddfSDavid du Colombier r.min.x += n; 57*7dd7cddfSDavid du Colombier r.min.y += n; 58*7dd7cddfSDavid du Colombier r.max.x -= n; 59*7dd7cddfSDavid du Colombier r.max.y -= n; 60*7dd7cddfSDavid du Colombier return r; 61*7dd7cddfSDavid du Colombier } 62*7dd7cddfSDavid du Colombier 63*7dd7cddfSDavid du Colombier Point 64*7dd7cddfSDavid du Colombier divpt(Point a, int b) 65*7dd7cddfSDavid du Colombier { 66*7dd7cddfSDavid du Colombier a.x /= b; 67*7dd7cddfSDavid du Colombier a.y /= b; 68*7dd7cddfSDavid du Colombier return a; 69*7dd7cddfSDavid du Colombier } 70*7dd7cddfSDavid du Colombier 71*7dd7cddfSDavid du Colombier Point 72*7dd7cddfSDavid du Colombier mulpt(Point a, int b) 73*7dd7cddfSDavid du Colombier { 74*7dd7cddfSDavid du Colombier a.x *= b; 75*7dd7cddfSDavid du Colombier a.y *= b; 76*7dd7cddfSDavid du Colombier return a; 77*7dd7cddfSDavid du Colombier } 78*7dd7cddfSDavid du Colombier 79*7dd7cddfSDavid du Colombier Rectangle 80*7dd7cddfSDavid du Colombier rectsubpt(Rectangle r, Point p) 81*7dd7cddfSDavid du Colombier { 82*7dd7cddfSDavid du Colombier r.min.x -= p.x; 83*7dd7cddfSDavid du Colombier r.min.y -= p.y; 84*7dd7cddfSDavid du Colombier r.max.x -= p.x; 85*7dd7cddfSDavid du Colombier r.max.y -= p.y; 86*7dd7cddfSDavid du Colombier return r; 87*7dd7cddfSDavid du Colombier } 88*7dd7cddfSDavid du Colombier 89*7dd7cddfSDavid du Colombier Rectangle 90*7dd7cddfSDavid du Colombier rectaddpt(Rectangle r, Point p) 91*7dd7cddfSDavid du Colombier { 92*7dd7cddfSDavid du Colombier r.min.x += p.x; 93*7dd7cddfSDavid du Colombier r.min.y += p.y; 94*7dd7cddfSDavid du Colombier r.max.x += p.x; 95*7dd7cddfSDavid du Colombier r.max.y += p.y; 96*7dd7cddfSDavid du Colombier return r; 97*7dd7cddfSDavid du Colombier } 98*7dd7cddfSDavid du Colombier 99*7dd7cddfSDavid du Colombier int 100*7dd7cddfSDavid du Colombier eqpt(Point p, Point q) 101*7dd7cddfSDavid du Colombier { 102*7dd7cddfSDavid du Colombier return p.x==q.x && p.y==q.y; 103*7dd7cddfSDavid du Colombier } 104*7dd7cddfSDavid du Colombier 105*7dd7cddfSDavid du Colombier int 106*7dd7cddfSDavid du Colombier eqrect(Rectangle r, Rectangle s) 107*7dd7cddfSDavid du Colombier { 108*7dd7cddfSDavid du Colombier return r.min.x==s.min.x && r.max.x==s.max.x && 109*7dd7cddfSDavid du Colombier r.min.y==s.min.y && r.max.y==s.max.y; 110*7dd7cddfSDavid du Colombier } 111*7dd7cddfSDavid du Colombier 112*7dd7cddfSDavid du Colombier int 113*7dd7cddfSDavid du Colombier rectXrect(Rectangle r, Rectangle s) 114*7dd7cddfSDavid du Colombier { 115*7dd7cddfSDavid du Colombier return r.min.x<s.max.x && s.min.x<r.max.x && 116*7dd7cddfSDavid du Colombier r.min.y<s.max.y && s.min.y<r.max.y; 117*7dd7cddfSDavid du Colombier } 118*7dd7cddfSDavid du Colombier 119*7dd7cddfSDavid du Colombier int 120*7dd7cddfSDavid du Colombier rectinrect(Rectangle r, Rectangle s) 121*7dd7cddfSDavid du Colombier { 122*7dd7cddfSDavid du Colombier return s.min.x<=r.min.x && r.max.x<=s.max.x && s.min.y<=r.min.y && r.max.y<=s.max.y; 123*7dd7cddfSDavid du Colombier } 124*7dd7cddfSDavid du Colombier 125*7dd7cddfSDavid du Colombier int 126*7dd7cddfSDavid du Colombier ptinrect(Point p, Rectangle r) 127*7dd7cddfSDavid du Colombier { 128*7dd7cddfSDavid du Colombier return p.x>=r.min.x && p.x<r.max.x && 129*7dd7cddfSDavid du Colombier p.y>=r.min.y && p.y<r.max.y; 130*7dd7cddfSDavid du Colombier } 131*7dd7cddfSDavid du Colombier 132*7dd7cddfSDavid du Colombier Rectangle 133*7dd7cddfSDavid du Colombier canonrect(Rectangle r) 134*7dd7cddfSDavid du Colombier { 135*7dd7cddfSDavid du Colombier int t; 136*7dd7cddfSDavid du Colombier if (r.max.x < r.min.x) { 137*7dd7cddfSDavid du Colombier t = r.min.x; 138*7dd7cddfSDavid du Colombier r.min.x = r.max.x; 139*7dd7cddfSDavid du Colombier r.max.x = t; 140*7dd7cddfSDavid du Colombier } 141*7dd7cddfSDavid du Colombier if (r.max.y < r.min.y) { 142*7dd7cddfSDavid du Colombier t = r.min.y; 143*7dd7cddfSDavid du Colombier r.min.y = r.max.y; 144*7dd7cddfSDavid du Colombier r.max.y = t; 145*7dd7cddfSDavid du Colombier } 146*7dd7cddfSDavid du Colombier return r; 147*7dd7cddfSDavid du Colombier } 148*7dd7cddfSDavid du Colombier 149*7dd7cddfSDavid du Colombier void 150*7dd7cddfSDavid du Colombier combinerect(Rectangle *r1, Rectangle r2) 151*7dd7cddfSDavid du Colombier { 152*7dd7cddfSDavid du Colombier if(r1->min.x > r2.min.x) 153*7dd7cddfSDavid du Colombier r1->min.x = r2.min.x; 154*7dd7cddfSDavid du Colombier if(r1->min.y > r2.min.y) 155*7dd7cddfSDavid du Colombier r1->min.y = r2.min.y; 156*7dd7cddfSDavid du Colombier if(r1->max.x < r2.max.x) 157*7dd7cddfSDavid du Colombier r1->max.x = r2.max.x; 158*7dd7cddfSDavid du Colombier if(r1->max.y < r2.max.y) 159*7dd7cddfSDavid du Colombier r1->max.y = r2.max.y; 160*7dd7cddfSDavid du Colombier } 161