Bitmap/Midpoint circle algorithm: Difference between revisions

Content added Content deleted
(Updated D entry)
(Updated D entry)
Line 304: Line 304:
</pre>
</pre>
=={{header|D}}==
=={{header|D}}==
Uses the second Image implementation.
Uses the bitmap module from the Bitmap Task.
<lang d>import bitmap2: Color, Image;
<lang d>import bitmap: Image, RGB;


void circle(Image img, in int x0, in int y0, in int radius,
void circle(Color)(Image!Color img, in int x0, in int y0,
in Color color) pure nothrow {
in int radius, in Color color) pure nothrow {
int f = 1 - radius;
int f = 1 - radius;
int ddfX = 1;
int ddfX = 1;
Line 314: Line 314:
int x = 0;
int x = 0;
int y = radius;
int y = radius;
img[y0 + radius][x0] = color;
img[x0, y0 + radius] = color;
img[y0 - radius][x0] = color;
img[x0, y0 - radius] = color;
img[y0][x0 + radius] = color;
img[x0 + radius, y0] = color;
img[y0][x0 - radius] = color;
img[x0 - radius, y0] = color;


while (x < y) {
while (x < y) {
Line 328: Line 328:
ddfX += 2;
ddfX += 2;
f += ddfX;
f += ddfX;
img[y0 + y][x0 + x] = color;
img[x0 + x, y0 + y] = color;
img[y0 + y][x0 - x] = color;
img[x0 - x, y0 + y] = color;
img[y0 - y][x0 + x] = color;
img[x0 + x, y0 - y] = color;
img[y0 - y][x0 - x] = color;
img[x0 - x, y0 - y] = color;
img[y0 + x][x0 + y] = color;
img[x0 + y, y0 + x] = color;
img[y0 + x][x0 - y] = color;
img[x0 - y, y0 + x] = color;
img[y0 - x][x0 + y] = color;
img[x0 + y, y0 - x] = color;
img[y0 - x][x0 - y] = color;
img[x0 - y, y0 - x] = color;
}
}
}
}


void main() {
void main() {
auto img = new Image(25, 25);
auto img = new Image!RGB(25, 25);
img.clear(Color.white);
img.clear(RGB.white);
circle(img, 12, 12, 12, Color.black);
circle(img, 12, 12, 12, RGB.black);
img.textualShow();
img.textualShow();
}</lang>
}</lang>