§ Линия
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; // Коррекция по X if (error2 > -deltay) { error -= deltay; x1 += signx; } // Коррекция по Y 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++; } }
13 авг, 2021
© 2007-2023 Правда в том, что Алиса закусывает огурцом