Advertisement
LilChicha174

Untitled

Jun 6th, 2022
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.74 KB | None | 0 0
  1. // Рисование круга(для толщины линии)
  2. void draw_Circle(struct Png *image, int x0, int y0, int line_fat, int width_pix, int Red,
  3.                  int
  4.                  Green,
  5.                  int Blue) {
  6.     int x = 0;
  7.     int rad = line_fat / 2;
  8.     int y = rad;
  9.     int start0 = y0 - rad;
  10.     int end1 = y0 + rad;
  11.     int phi = 1 - 2 * rad;
  12.     int err;
  13.     while (y >= 0) {
  14.         paint_pixel(image, x0 + x, y0 + y, width_pix, Red, Green, Blue);
  15.  
  16.         paint_pixel(image, x0 + x, y0 - y, width_pix, Red, Green, Blue);
  17.  
  18.         paint_pixel(image, x0 - x, y0 + y, width_pix, Red, Green, Blue);
  19.  
  20.         paint_pixel(image, x0 - x, y0 - y, width_pix, Red, Green, Blue);
  21.  
  22.         err = 2 * (phi + y) - 1;
  23.         while (start0 <= y0) {
  24.             for (int i = abs(x - x0); i < (x + x0); i++) {
  25.                 paint_pixel(image, i, start0, width_pix, Red, Green, Blue);
  26.  
  27.                 paint_pixel(image, i, end1, width_pix, Red, Green, Blue);
  28.             }
  29.             if (err > 0) {
  30.                 start0++;
  31.                 end1--;
  32.             }
  33.             break;
  34.         }
  35.         if (phi < 0 && err <= 0) {
  36.             ++x;
  37.             phi += 2 * x + 1;
  38.             continue;
  39.         }
  40.         err = 2 * (phi - x) - 1;
  41.         if (phi > 0 && err > 0) {
  42.             --y;
  43.             phi += 1 - 2 * y;
  44.             continue;
  45.         }
  46.         ++x;
  47.         phi += 2 * (x - y);
  48.         --y;
  49.     }
  50. }
  51.  
  52. void paint_line(struct Png *image, int width_pix, int x0, int y0, int x1, int y1, int line_fat,
  53.                 int Red, int Green, int Blue) {
  54.     int A, B, sign1;
  55.     A = y1 - y0;
  56.     B = x0 - x1;
  57.     if (abs(A) > abs(B)) sign1 = 1;
  58.     else sign1 = -1;
  59.     int signA, signB;
  60.     if (A < 0) signA = -1;
  61.     else signA = 1;
  62.     if (B < 0) signB = -1;
  63.     else signB = 1;
  64.     int f = 0;
  65.  
  66.     paint_pixel(image, x0, y0, width_pix, Red, Green, Blue);
  67.     draw_Circle(image, x0, y0, line_fat, width_pix, Red, Green, Blue);
  68.     int x = x0, y = y0;
  69.     if (sign1 == -1) {
  70.         do {
  71.             f += A * signA;
  72.             if (f > 0) {
  73.                 f -= B * signB;
  74.                 y += signA;
  75.             }
  76.             x -= signB;
  77.             paint_pixel(image, x, y, width_pix, Red, Green, Blue);
  78.             draw_Circle(image, x, y, line_fat, width_pix, Red, Green, Blue);
  79.         } while (x != x1 || y != y1);
  80.     } else {
  81.         do {
  82.             f += B * signB;
  83.             if (f > 0) {
  84.                 f -= A * signA;
  85.                 x -= signB;
  86.             }
  87.             y += signA;
  88.             paint_pixel(image, x, y, width_pix, Red, Green, Blue);
  89.             draw_Circle(image, x, y, line_fat, width_pix, Red, Green, Blue);
  90.         } while (x != x1 || y != y1);
  91.     }
  92. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement