Analysis of Algorithm Computer Graphics Data Structures

Cohen Sutherland Line Clipping Algorithm In C

This is only the code and the output. Explanation of the code will follow soon. Stay Tuned!!
1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#include<conio.h>
#include<stdio.h>
#include<graphics.h>
#include<math.h>
void bytecode();
void sutherland();
int a[4],b[4];
float m,xnew,ynew;
float xl = 100, yl = 100, xh = 300, yh = 300,xa = 10,ya = 200,xb = 250, yb = 150;
void main()
{
  int gd = DETECT,gm;
  initgraph(&gd,&gm,"C:\\TURBOC3\\BGI");
  setcolor(5);
  line(xa,ya,xb,yb);
  setcolor(12);
  rectangle(xl,yl,xh,yh);
  m = (yb-ya)/(xb-xa);
  bytecode();
  sutherland();
  getch();
}

void bytecode()
{
  if(xa < xl)
    a[3] = 1;
  else a[3] = 0;

  if(xa>xh)
   a[2] = 1;
  else a[2] = 0;

  if(ya < yl)
   a[1] = 1;
  else a[1] = 0;

  if (ya > yh)
   a[0] = 1;
   else a[0] = 0;

  if(xb < xl)
    b[3] = 1;
  else b[3] = 0;

  if(xb>xh)
   b[2] = 1;
  else b[2] = 0;

  if(yb < yl)
   b[1] = 1;
  else b[1] = 0;

  if (yb > yh)
   b[0] = 1;
   else b[0] = 0;
}

void sutherland()
{
  printf("press a key to continue");
  getch();
  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 )
  {

   printf("no clipping");
   line(xa,ya,xb,yb);
  }
  else if(a[0]&&b[0] || a[1]&&b[1] || a[2]&&b[2] || a[3]&&b[3])
  {
   clrscr();
   printf("line discarded");
   rectangle(xl,yl,xh,yh);
  }
  else
  {
   if(a[3] == 1 && b[3]==0)
   {
    ynew  = (m * (xl-xa)) + ya;
    setcolor(12);
    rectangle(xl,yl,xh,yh);
    setcolor(0);
    line(xa,ya,xb,yb);
    setcolor(15);
    line(xl,ynew,xb,yb);
   }
   else if(a[2] == 1 && b[2] == 0)
   {
    ynew  = (m * (xh-xa)) + ya;
    setcolor(12);
    rectangle(xl,yl,xh,yh);
    setcolor(0);
    line(xa,ya,xb,yb);
    setcolor(15);
    line(xl,ynew,xb,yb);
   }
   else if(a[1] == 1 && b[1] == 0)
   {
    xnew = xa + (yl-ya)/m;
    setcolor(0);
    line(xa,ya,xb,yb);
    setcolor(15);
    line(xnew,yh,xb,yb);
   }

   else if(a[0] == 1 && b[0] == 0)
   {
    xnew = xa + (yh-ya)/m;
    setcolor(0);
    line(xa,ya,xb,yb);
    setcolor(15);
    line(xnew,yh,xb,yb);
   }
  }
}


Before Clipping

After Clipping

Comments

  1. helpful cohen sutherland line algo

    ReplyDelete
  2. What will happen when b[] ==1 you have not included that condition

    ReplyDelete
  3. Very very helpful to me, easy to understand

    ReplyDelete

Post a Comment

Popular posts from this blog

Graph Coloring using Backtracking in C

Longest Common Subsequence using Dynamic Programming in C