#include #include #include #include #include "output.h" void circle2(int r) { int x = 0; int y = r; int d = -r; /* d = x^2 + y^2 - r^2 - y */ /* Precondition */ assert(r >= 0); output8(x, y); while(x < y) { d += 2 * x + 1; /* d' = d + 2 * x + 1 */ x += 1; if(d > 0) { /* d'-d'' = 2 * y */ y -= 1; d += -2 * y; /* d'' = d' - 2 * y + 1 = d + 2 * x - 2 * y + 1 */ } #if DEBUG { int d0 = x*x + y*y-r*r -y; if(d != d0) { fprintf(stderr, "x=%d, y=%d, d=%d, should be d=%d\n", x, y, d, d0); } } #endif output8(x, y); } }