ulvis.paste.net

Paste Search Dynamic
Recent pastes
struct pair
  1. #include<stdio.h>
  2. #include<conio.h>
  3. #include <math.h>
  4. struct pair {
  5.     int16_t x;
  6.     int16_t y;
  7. };
  8.  
  9. void main() {
  10.   for (uint8_t i = 30; i < 31; i++) {
  11.       int16_t number_of_points = int((sqrt(2)*(i - 2) + 5) / 2) * 8 + 4;
  12.       int16_t radius = i;
  13.       int16_t origin_x = 30;
  14.       int16_t origin_y = 0;//64/2;
  15.       struct pair *list_of_points = (struct pair*) calloc(number_of_points, sizeof(struct pair));
  16.       generate_list_of_points(list_of_points, origin_x, origin_y, radius, number_of_points);
  17.       for (uint16_t k = 0; k < number_of_points; k++) {
  18.         // Check for consecutive 0,0 pairs
  19.         if (k == number_of_points - 8) {
  20.             uint8_t counter = 0;
  21.             for (uint8_t add = 0; add < 8; add++) {
  22.                 if (list_of_points[k + add].x == 0 && list_of_points[k + add].y == 0) counter++;
  23.             }
  24.             if (counter >= 8) {
  25.                 printf("%s", "Trimming "); printf("%s", counter); printf("%s\n", " consecutive trailing 0,0 pairs"); break;
  26.             }
  27.         }
  28.        
  29.         printf("%s", k); printf("%s", ": "); printf("%s", list_of_points[k].x); printf("%s", ", "); printf("%s", list_of_points[k].y); printf("%s\n", "");
  30.       }
  31.   }
  32. }
  33.  
  34. void generate_list_of_points(struct pair *buf, int16_t x0, int16_t y0, uint8_t r, uint16_t number_of_points) {
  35.     int16_t f = 1 - r;
  36.     int16_t ddF_x = 1;
  37.     int16_t ddF_y = -2 * r;
  38.     int16_t x = 0;
  39.     int16_t y = r;
  40.     uint16_t count = 0;
  41.    
  42.     buf[count++] = ((struct pair){x0, y0 + r}); // Right
  43.     buf[count++] = ((struct pair){x0, y0 - r}); // Left
  44.     buf[count++] = ((struct pair){x0 + r, y0}); // Top
  45.     buf[count++] = ((struct pair){x0 - r, y0}); // Bottom
  46.  
  47.     while (x < y) {
  48.         if (count + 8 > number_of_points) return;
  49.        
  50.         if (f >= 0) {
  51.             y--;
  52.             ddF_y += 2;
  53.             f += ddF_y;
  54.         }
  55.         x++;
  56.         ddF_x += 2;
  57.         f += ddF_x;
  58.        
  59.         buf[count++] = ((struct pair){x0 + x, y0 + y});
  60.         buf[count++] = ((struct pair){x0 - x, y0 + y});
  61.         buf[count++] = ((struct pair){x0 + x, y0 - y});
  62.         buf[count++] = ((struct pair){x0 - x, y0 - y});
  63.         buf[count++] = ((struct pair){x0 + y, y0 + x});
  64.         buf[count++] = ((struct pair){x0 - y, y0 + x});
  65.         buf[count++] = ((struct pair){x0 + y, y0 - x});
  66.         buf[count++] = ((struct pair){x0 - y, y0 - x});
  67.     }
  68. }
Parsed in 0.029 seconds