static void drawlineroundempty(uint8_t *data, int width, int height, double sx, double sy, double span, double radius, double subwidth) { int x, y; double cx = sx - 0.5, cy = sy - 0.5, sw = (double)subwidth / 2.0; for(y = 0; y != height; y++) { for(x = 0; x != width; x++) { double dx = (double)x - cx, dy = (double)y - cy; double d = (SQRT2 / 2.0) * fabs(dx + dy) - radius; d = fmax(fabs(dx) + fabs(dy) - (SQRT2 / 2.0) * (double)span - radius, d); double ddx = (double)x - cx - span * SQRT2 , ddy = (double)y - cy + span * SQRT2; double d2 = sqrt(ddx * ddx + ddy * ddy) - sw; d = fmin(d, d2); ddx = (double)x - cx + span * SQRT2; ddy = (double)y - cy - span * SQRT2; d2 = sqrt(ddx * ddx + ddy * ddy) - sw; d = fmin(d, d2); *data = pixelmin(d, *data); data++; } } }
static void drawsubcircle(uint8_t *data, int width, int height, double cx, double cy, double subwidth) { int x, y; double hw = cx - 0.5, vw = cy - 0.5, sw = subwidth / 2.0; for(y = 0; y != height; y++) { for(x = 0; x != width; x++) { double dx = (x - hw), dy = (y - vw); double d = sqrt(dx * dx + dy * dy) - sw; *data = pixelmin(d, *data); data++; } } }
static void svgdraw_line_down_neg(uint8_t *data, int width, int height, double sx, double sy, double span, double radius) { int x, y; double cx = sx - 0.5, cy = sy - 0.5; for(y = 0; y != height; y++) { for(x = 0; x != width; x++) { double dx = (double)x - cx, dy = (double)y - cy; double d = (SQRT2 / 2.0) * fabs(dx - dy) - radius; d = fmax(fabs(dx) + fabs(dy) - (SQRT2 / 2.0) * (double)span - radius, d); *data = pixelmin(d, *data); data++; } } }