§ Линия
Алгоритм Брезенхэма.
void line(int x1, int y1, int x2, int y2, int color)
{
int signx = x1 < x2 ? 1 : -1;
int signy = y1 < y2 ? 1 : -1;
int deltax = x2 > x1 ? x2 - x1 : x1 - x2;
int deltay = y2 > y1 ? y2 - y1 : y1 - y2;
int error = deltax - deltay;
int error2;
pset(x2, y2, color);
while ((x1 != x2) || (y1 != y2)) {
pset(x1, y1, color);
error2 = 2 * error;
if (error2 > -deltay) { error -= deltay; x1 += signx; }
if (error2 < deltax) { error += deltax; y1 += signy; }
}
}
§ Рисование окружности
void circle(int xc, int yc, int radius, int color)
{
int x = 0,
y = radius,
d = 3 - 2*y;
while (x <= y) {
pset(xc - x, yc + y, color);
pset(xc + x, yc + y, color);
pset(xc - x, yc - y, color);
pset(xc + x, yc - y, color);
pset(xc - y, yc + x, color);
pset(xc + y, yc + x, color);
pset(xc - y, yc - x, color);
pset(xc + y, yc - x, color);
d += (4*x + 6);
if (d >= 0) {
d += 4*(1 - y);
y--;
}
x++;
}
}
§ Рисование закрашенной окружности
void circle_fill(int xc, int yc, int radius, int color)
{
int x = 0,
y = radius,
d = 3 - 2*y;
while (x <= y) {
line(xc - x, yc + y, xc + x, yc + y, color);
line(xc - x, yc - y, xc + x, yc - y, color);
line(xc - y, yc + x, xc + y, yc + x, color);
line(xc - y, yc - x, xc + y, yc - x, color);
d += (4*x + 6);
if (d >= 0) {
d += 4*(1 - y);
y--;
}
x++;
}
}