Advertisement
LilChicha174

Untitled

Jun 6th, 2022
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.79 KB | None | 0 0
  1. // Рисование круга(для толщины линии)
  2. void draw_Circle(struct Png *image, int x0, int y0, int line_fat, int width_pixel, int Red,
  3.                  int
  4.                  Green,
  5.                  int Blue) {
  6.     int x = 0;
  7.     int radius = line_fat / 2;
  8.     int y = radius;
  9.     int start = y0 - radius;
  10.     int end = y0 + radius;
  11.     int delta = 1 - 2 * radius;
  12.     int error;
  13.     while (y >= 0) {
  14.         paint_pixel(image, x0 + x, y0 + y, width_pixel, Red, Green, Blue);
  15.  
  16.         paint_pixel(image, x0 + x, y0 - y, width_pixel, Red, Green, Blue);
  17.  
  18.         paint_pixel(image, x0 - x, y0 + y, width_pixel, Red, Green, Blue);
  19.  
  20.         paint_pixel(image, x0 - x, y0 - y, width_pixel, Red, Green, Blue);
  21.  
  22.         error = 2 * (delta + y) - 1;
  23.         while (start <= y0) {
  24.             for (int i = abs(x - x0); i < (x + x0); i++) {
  25.                 paint_pixel(image, i, start, width_pixel, Red, Green, Blue);
  26.  
  27.                 paint_pixel(image, i, end, width_pixel, Red, Green, Blue);
  28.             }
  29.             if (error > 0) {
  30.                 start++;
  31.                 end--;
  32.             }
  33.             break;
  34.         }
  35.         if (delta < 0 && error <= 0) {
  36.             ++x;
  37.             delta += 2 * x + 1;
  38.             continue;
  39.         }
  40.         error = 2 * (delta - x) - 1;
  41.         if (delta > 0 && error > 0) {
  42.             --y;
  43.             delta += 1 - 2 * y;
  44.             continue;
  45.         }
  46.         ++x;
  47.         delta += 2 * (x - y);
  48.         --y;
  49.     }
  50. }
  51.  
  52. void paint_line(struct Png *image, int width_pixel, int x0, int y0, int x1, int y1, int line_fat,
  53.                 int Red, int Green, int Blue) {
  54.     int A, B, sign;
  55.     A = y1 - y0;
  56.     B = x0 - x1;
  57.     if (abs(A) > abs(B)) sign = 1;
  58.     else sign = -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_pixel, Red, Green, Blue);
  67.     draw_Circle(image, x0, y0, line_fat, width_pixel, Red, Green, Blue);
  68.     int x = x0, y = y0;
  69.     if (sign == -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_pixel, Red, Green, Blue);
  78.             draw_Circle(image, x, y, line_fat, width_pixel, 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_pixel, Red, Green, Blue);
  89.             draw_Circle(image, x, y, line_fat, width_pixel, Red, Green, Blue);
  90.         } while (x != x1 || y != y1);
  91.     }
  92. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement