Advertisement
mystupiddog

Visualize lines in C terminal given two points

Oct 5th, 2015
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.93 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. const int MIN_X = -40, MIN_Y = -12,
  5.           MAX_X = 40, MAX_Y = 12;
  6.  
  7. typedef struct {
  8.     int x;
  9.     int y;
  10. } point;
  11.  
  12. typedef struct {
  13.     point a;
  14.     point b;
  15.     double rico;
  16.     double m;
  17. } line;
  18.  
  19. void plot_grid();
  20. void plot_line(line *k);
  21. int get_highest(int x, int y);
  22. void calc_line(line *k);
  23.  
  24. int main(int argc, char** argv)
  25. {
  26.     //plot_grid(); 
  27.    
  28.     line x = {
  29.         { -25, -7 },
  30.         { 30, 5 },
  31.         0.0,
  32.         0.0
  33.     };
  34.  
  35.     plot_line(&x);
  36.  
  37.     return 0;
  38. }
  39.  
  40. void calc_line(line *k)
  41. {
  42.     //line <=> y = (rico)*x + m
  43.     int highest = get_highest(k->a.y, k->b.y);
  44.     double dY, dX;
  45.  
  46.     //set dY, dX;
  47.     if(highest == k->b.y)
  48.     {
  49.         //verschil in Y en X
  50.         dY = k->b.y - k->a.y;
  51.         dX = k->b.x - k->a.x;
  52.     }
  53.     else
  54.     {
  55.         //verschil in Y en X
  56.         dY = k->a.y - k->b.y;
  57.         dX = k->a.x - k->b.x;
  58.     }
  59.  
  60.     if(dX != 0)
  61.         k->rico = dY / dX;
  62.  
  63.     double temp = k->rico * k->b.x;
  64.  
  65.     if(temp != 0)
  66.     {
  67.         // y = (rico)x + m => m = y/(rico)x
  68.         k->m = k->b.y / temp;
  69.     }
  70.  
  71.     printf("m = %f, rico = %f\n\n", k->m, k->rico);
  72. }
  73.  
  74. void plot_line(line *k)
  75. {
  76.     int i, j;
  77.  
  78.     calc_line(k);
  79.  
  80.  
  81.     printf("m = %f, rico = %f\n\n", k->m, k->rico);
  82.  
  83.     for(i = MIN_Y; i < MAX_Y; i++)
  84.     {
  85.         for(j = MIN_X; j < MAX_X; j++)
  86.         {
  87.             int temp = (int)floor(k->rico * j + k->m) * -1;
  88.            
  89.             if(temp != i)
  90.             {
  91.                 if(j != 0)
  92.                 {
  93.                     if(i != 0)
  94.                         printf(" ");
  95.                     else
  96.                         printf("-");
  97.                 }
  98.                 else
  99.                 {
  100.                     if(i != 0)
  101.                         printf("|");
  102.                     else
  103.                         printf("+");
  104.                 }  
  105.             }
  106.             else
  107.             {
  108.                 printf("*");
  109.             }
  110.         }
  111.     }
  112. }
  113.  
  114. int get_highest(int x, int y)
  115. {
  116.     int k = 0;
  117.  
  118.     if(y > x)
  119.         k = y;
  120.     else
  121.         k = x;
  122.  
  123.     return k;
  124. }
  125.  
  126. void plot_grid()
  127. {
  128.     int x, y;
  129.  
  130.     for(y = MIN_Y; y < MAX_Y; y++)
  131.     {
  132.         for(x = MIN_X; x < MAX_X; x++)
  133.         {
  134.             if(x != 0)
  135.             {
  136.                 if(y != 0)
  137.                     printf(" ");
  138.                 else
  139.                     printf("-");
  140.             }
  141.             else
  142.             {
  143.                 if(y != 0)
  144.                     printf("|");
  145.                 else
  146.                     printf("+");
  147.             }
  148.         }
  149.     }
  150. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement