Advertisement
Shishu

Cohen Sutherland Line Clipping Algorithm in C Program

Mar 29th, 2019
158
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.00 KB | None | 0 0
  1. #include<conio.h>
  2. #include<stdio.h>
  3. #include<graphics.h>
  4. #include<math.h>
  5. void bytecode();
  6. void sutherland();
  7. int a[4],b[4];
  8. float m,xnew,ynew;
  9. float xl = 100, yl = 100, xh = 300, yh = 300,xa = 10,ya = 200,xb = 250, yb = 150;
  10. void main()
  11. {
  12.   int gd = DETECT,gm;
  13.   initgraph(&gd,&gm,"C:\\TURBOC3\\BGI");
  14.   setcolor(5);
  15.   line(xa,ya,xb,yb);
  16.   setcolor(12);
  17.   rectangle(xl,yl,xh,yh);
  18.   m = (yb-ya)/(xb-xa);
  19.   bytecode();
  20.   sutherland();
  21.   getch();
  22. }
  23.  
  24. void bytecode()
  25. {
  26.   if(xa < xl)
  27.     a[3] = 1;
  28.   else a[3] = 0;
  29.  
  30.   if(xa>xh)
  31.    a[2] = 1;
  32.   else a[2] = 0;
  33.  
  34.   if(ya < yl)
  35.    a[1] = 1;
  36.   else a[1] = 0;
  37.  
  38.   if (ya > yh)
  39.    a[0] = 1;
  40.    else a[0] = 0;
  41.  
  42.   if(xb < xl)
  43.     b[3] = 1;
  44.   else b[3] = 0;
  45.  
  46.   if(xb>xh)
  47.    b[2] = 1;
  48.   else b[2] = 0;
  49.  
  50.   if(yb < yl)
  51.    b[1] = 1;
  52.   else b[1] = 0;
  53.  
  54.   if (yb > yh)
  55.    b[0] = 1;
  56.    else b[0] = 0;
  57. }
  58.  
  59. void sutherland()
  60. {
  61.   printf("press a key to continue");
  62.   getch();
  63.   if(a[0] == 0 && a[1] == 0 && a[2] == 0 && a[3] == 0 && b[0] == 0 && b[1] == 0 && b[2] == 0 && b[3] == 0 )
  64.   {
  65.  
  66.    printf("no clipping");
  67.    line(xa,ya,xb,yb);
  68.   }
  69.   else if(a[0]&&b[0] || a[1]&&b[1] || a[2]&&b[2] || a[3]&&b[3])
  70.   {
  71.    clrscr();
  72.    printf("line discarded");
  73.    rectangle(xl,yl,xh,yh);
  74.   }
  75.   else
  76.   {
  77.    if(a[3] == 1 && b[3]==0)
  78.    {
  79.     ynew  = (m * (xl-xa)) + ya;
  80.     setcolor(12);
  81.     rectangle(xl,yl,xh,yh);
  82.     setcolor(0);
  83.     line(xa,ya,xb,yb);
  84.     setcolor(15);
  85.     line(xl,ynew,xb,yb);
  86.    }
  87.    else if(a[2] == 1 && b[2] == 0)
  88.    {
  89.     ynew  = (m * (xh-xa)) + ya;
  90.     setcolor(12);
  91.     rectangle(xl,yl,xh,yh);
  92.     setcolor(0);
  93.     line(xa,ya,xb,yb);
  94.     setcolor(15);
  95.     line(xl,ynew,xb,yb);
  96.    }
  97.    else if(a[1] == 1 && b[1] == 0)
  98.    {
  99.     xnew = xa + (yl-ya)/m;
  100.     setcolor(0);
  101.     line(xa,ya,xb,yb);
  102.     setcolor(15);
  103.     line(xnew,yh,xb,yb);
  104.    }
  105.  
  106.    else if(a[0] == 1 && b[0] == 0)
  107.    {
  108.     xnew = xa + (yh-ya)/m;
  109.     setcolor(0);
  110.     line(xa,ya,xb,yb);
  111.     setcolor(15);
  112.     line(xnew,yh,xb,yb);
  113.    }
  114.   }
  115. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement