§ Линия
Алгоритм Брезенхэма.
1void line(int x1, int y1, int x2, int y2, int color) {
2
3
4 int signx = x1 < x2 ? 1 : -1;
5 int signy = y1 < y2 ? 1 : -1;
6 int deltax = x2 > x1 ? x2 - x1 : x1 - x2;
7 int deltay = y2 > y1 ? y2 - y1 : y1 - y2;
8 int error = deltax - deltay;
9 int error2;
10
11
12 pset(x2, y2, color);
13
14
15 while ((x1 != x2) || (y1 != y2)) {
16
17 pset(x1, y1, color);
18 error2 = 2 * error;
19
20
21 if (error2 > -deltay) {
22 error -= deltay;
23 x1 += signx;
24 }
25
26
27 if (error2 < deltax) {
28 error += deltax;
29 y1 += signy;
30 }
31 }
32}
§ Рисование окружности
1void circle(int xc, int yc, int radius, int color) {
2
3 int x = 0,
4 y = radius,
5 d = 3 - 2*y;
6
7 while (x <= y) {
8
9
10 pset(xc - x, yc + y, color);
11 pset(xc + x, yc + y, color);
12 pset(xc - x, yc - y, color);
13 pset(xc + x, yc - y, color);
14
15
16 pset(xc - y, yc + x, color);
17 pset(xc + y, yc + x, color);
18 pset(xc - y, yc - x, color);
19 pset(xc + y, yc - x, color);
20
21 d += (4*x + 6);
22 if (d >= 0) {
23 d += 4*(1 - y);
24 y--;
25 }
26
27 x++;
28 }
29}
§ Рисование закрашенной окружности
1void circle_fill(int xc, int yc, int radius, int color) {
2
3 int x = 0,
4 y = radius,
5 d = 3 - 2*y;
6
7 while (x <= y) {
8
9
10 line(xc - x, yc + y, xc + x, yc + y, color);
11 line(xc - x, yc - y, xc + x, yc - y, color);
12
13
14 line(xc - y, yc + x, xc + y, yc + x, color);
15 line(xc - y, yc - x, xc + y, yc - x, color);
16
17 d += (4*x + 6);
18 if (d >= 0) {
19 d += 4*(1 - y);
20 y--;
21 }
22
23 x++;
24 }
25}