From: Tony Cook Date: Mon, 27 Jan 2014 10:57:59 +0000 (+1100) Subject: don't match against horizontal lines X-Git-Tag: v1.002~7^2~3 X-Git-Url: http://git.imager.perl.org/imager.git/commitdiff_plain/020d5e38c8b1a929c0ef0e35287999df6092cdc5 don't match against horizontal lines --- diff --git a/polygon.c b/polygon.c index 2a84c8c2..6ca404ce 100644 --- a/polygon.c +++ b/polygon.c @@ -89,8 +89,6 @@ line_set_new(const i_polygon_t *polys, size_t count, size_t *line_count) { for (i = 0; i < count; ++i) lines += polys[i].count; - *line_count = lines; - line = lset = mymalloc(sizeof(p_line) * lines); n = 0; @@ -98,18 +96,25 @@ line_set_new(const i_polygon_t *polys, size_t count, size_t *line_count) { const i_polygon_t *p = polys + i; for(j = 0; j < p->count; j++) { - line->n = n++; line->x1 = IMTRUNC(p->x[j]); line->y1 = IMTRUNC(p->y[j]); line->x2 = IMTRUNC(p->x[(j + 1) % p->count]); line->y2 = IMTRUNC(p->y[(j + 1) % p->count]); + + /* don't include purely horizontal lines, we don't usefully + intersect with them. */ + if (line->y1 == line->y2) + continue; + line->miny = i_min(line->y1, line->y2); line->maxy = i_max(line->y1, line->y2); line->minx = i_min(line->x1, line->x2); line->maxx = i_max(line->x1, line->x2); + line->n = n++; ++line; } } + *line_count = n; return lset; }