/* See {pz_windo.h} */ /* Last edited on 2008-02-08 13:36:14 by stolfi */ #include #include #include #include #include #include bool_t pz_window_is_empty(pz_window_t *w) { return (w->r[0].end[0] >= w->r[0].end[1]) || (w->r[1].end[0] >= w->r[1].end[1]); } pz_window_t pz_window_join(pz_window_t *w1, pz_window_t *w2) { pz_window_t wr; int ax; for (ax = 0; ax < 2; ax++) { wr.r[ax].end[0] = fmin(w1->r[ax].end[0], w2->r[ax].end[0]); wr.r[ax].end[1] = fmax(w1->r[ax].end[1], w2->r[ax].end[1]); } return wr; } pz_window_t pz_window_expand(pz_window_t *w, double rel) { pz_window_t wr; int ax; for (ax = 0; ax < 2; ax++) { double extra = rel*fmax(1.0e-100, w->r[ax].end[1] - w->r[ax].end[0]); wr.r[ax].end[0] = w->r[ax].end[0] - extra; wr.r[ax].end[1] = w->r[ax].end[1] + extra; } return wr; } #define pz_window_FILE_TYPE "pz_window_t" #define pz_window_FILE_VERSION "2004-04-30" pz_window_t pz_window_read(FILE *rd) { pz_window_t w; filefmt_read_header(rd, pz_window_FILE_TYPE, pz_window_FILE_VERSION); w.r[0].end[0] = nget_double(rd, "XMin"); fget_eol(rd); w.r[0].end[1] = nget_double(rd, "XMax"); fget_eol(rd); w.r[1].end[0] = nget_double(rd, "YMin"); fget_eol(rd); w.r[1].end[1] = nget_double(rd, "YMax"); fget_eol(rd); filefmt_read_footer(rd, pz_window_FILE_TYPE); return w; }