|
DataMuseum.dkPresents historical artifacts from the history of: Commodore CBM-900 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Commodore CBM-900 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 3468 (0xd8c) Types: TextFile Notes: UNIX file Names: »rmath.c«
└─⟦f27320a65⟧ Bits:30001972 Commodore 900 hard disk image with partial source code └─⟦2d53db1df⟧ UNIX Filesystem └─⟦this⟧ »hr/src/smgr/rmath.c«
#include <stdio.h> #include "smgr.h" RECT R_Intersection(s,t) register RECT s,t; { RECT r; r.origin.x = s.origin.x > t.origin.x ? s.origin.x : t.origin.x; r.origin.y=s.origin.y>t.origin.y?s.origin.y:t.origin.y; r.corner.x=s.corner.x<t.corner.x?s.corner.x:t.corner.x; r.corner.y=s.corner.y<t.corner.y?s.corner.y:t.corner.y; return(r); } /* ** Calculate the smallest rectangle that encloses rectangles 's' and 't'. */ RECT R_merge(s,t) register RECT s,t; { RECT r; r.origin.x=s.origin.x<t.origin.x?s.origin.x:t.origin.x; r.origin.y=s.origin.y<t.origin.y?s.origin.y:t.origin.y; r.corner.x=s.corner.x>t.corner.x?s.corner.x:t.corner.x; r.corner.y=s.corner.y>t.corner.y?s.corner.y:t.corner.y; return(r); } /* ** Set rectangle 's' to a rectangle that includes the rectangle 'r' and point 'p' */ RECT R_incl_point(r,p) register RECT r; register POINT p; { RECT s; s.origin.x = r.origin.x < p.x ? r.origin.x : p.x; s.origin.y = r.origin.y < p.y ? r.origin.y : p.y; s.corner.x = r.corner.x > p.x ? r.corner.x : p.x; s.corner.y = r.corner.y > p.y ? r.corner.y : p.y; return(s); } /* ** Inset the corners of the rectangle 'r' by 'dx' and 'dy'. */ RECT R_inset(r,x,y) register RECT r; register int x,y; { RECT s; s.origin.x = r.origin.x + x; s.origin.y = r.origin.y + y; s.corner.x = r.corner.x - x; s.corner.y = r.corner.y - y; return(s); } /* ** Calculate the translation of 'r' by adding point 'p'. */ RECT R_addp(r, p) register RECT r; register POINT p; { RECT s; s.origin.x = r.origin.x + p.x; s.origin.y = r.origin.y + p.y; s.corner.x = r.corner.x + p.x; s.corner.y = r.corner.y + p.y; return(s); } /* ** Calculate the translation of 'r' by subtracting point 'p'. */ RECT R_subp(r, p) register RECT r; register POINT p; { RECT s; s.origin.x = r.origin.x - p.x; s.origin.y = r.origin.y - p.y; s.corner.x = r.corner.x - p.x; s.corner.y = r.corner.y - p.y; return(s); } /* ** Calculate the translation of 'r' by a displacement 'dx' and 'dy'. */ RECT R_offset(r, x, y) register RECT r; register int x,y; { RECT s; s.origin.x = r.origin.x + x; s.origin.y = r.origin.y + y; s.corner.x = r.corner.x + x; s.corner.y = r.corner.y + y; return(s); } /* ** Do rectangles 'r' and 's' intersect? */ bool R_intersect(r,s) register RECT r,s; { return ( r.origin.x < s.corner.x && s.origin.x < r.corner.x && r.origin.y < s.corner.y && s.origin.y < r.corner.y ); } /* ** Are rectangles 'r' and 's' equal? */ bool R_equal(r,s) register RECT r,s; { return ( r.origin.x == s.origin.x && r.origin.y == s.origin.y && r.corner.x == s.corner.x && r.corner.y == s.corner.y ); } /* * Is point 'p' contained within rectangle 'r'? */ bool R_point_in(r, p) register RECT r; register POINT p; { return ( p.x >= r.origin.x && p.y >= r.origin.y && p.x < r.corner.x && p.y < r.corner.y ); } /* ** Is rectangle 'r' empty? */ bool R_null(r) register RECT r; { return ( r.origin.x >= r.corner.x || r.origin.y >= r.corner.y ); } /* ** Set rectangle 'r' to an empty rectangle. */ RECT R_empty(r) register RECT r; { r.origin.x = r.origin.y = 0; r.corner.x = r.corner.y = 0; return(r); } /* ** Is rectangle r contained within rectangle s */ bool R_subset(r,s) register RECT r,s; { return ( (r.origin.x >= s.origin.x) && (r.origin.y >= s.origin.y) && (r.corner.x <= s.corner.x) && (r.corner.y <= s.corner.y) ); }