Search This Blog

Loading...

Cohen Sutherland Line Clipping Algorithm C Code

The main use of Line Clipping Algorithm in computer graphics is to remove objects, lines or line segments that are outside of the display panel. The transformation of the vision is relative insensitive to the position of points on the volume display - in particular, the viewer - and it is necessary to remove these points before creating the view.

#include"stdio.h"
#include"conio.h"
#include"graphics.h"
void main()
{
int gd=DETECT, gm;
float i,xmax,ymax,xmin,ymin,x1,y1,x2,y2,m;
float start[4],end[4],code[4];
clrscr();
initgraph(&gd,&gm,"");
printf("\n\tPlease enter the bottom left co-ordinate of viewport: ");
scanf("%f %f",&xmin,&ymin);
printf("\n\tPlease enter the top right co-ordinate of viewport: ");
scanf("%f %f",&xmax,&ymax);
printf("\nPlease enter the co-ordinates for starting point of line: ");
scanf("%f %f",&x1,&y1);
printf("\nPlease enter the co-ordinates for ending point of line: ");
scanf("%f %f",&x2,&y2);
for(i=0;i <4;i++)

{
start[i]=0;
end[i]=0;
}
m=(y2-y1)/(x2-x1);
if(x1 <xmin) start[0]=1;
if(x1 >xmax) start[1]=1;
if(y1 >ymax) start[2]=1;
if(y1 <ymin) start[3]=1;
if(x2 <xmin) end[0]=1;
if(x2 >xmax) end[1]=1;
if(y2 >ymax) end[2]=1;
if(y2 <ymin) end[3]=1;
for(i=0;i <4;i++)


code[i]=start[i]&&end[i];

if((code[0]==0)&&(code[1]==0)&&(code[2]==0)&&(code[3]==0))
{
if((start[0]==0)&&(start[1]==0)&&(start[2]==0)&&(start[3]==0)&&(end[0]==0)&&(end[1]==0)&&(end[2]==0)&&(end[3]==0))
{
cleardevice();
    printf("\n\t\tThe line is totally visible\n\t\tand not a clipping candidate");
    rectangle(xmin,ymin,xmax,ymax);
    line(x1,y1,x2,y2);
    getch();
}
else
{
    cleardevice();
    printf("\n\t\tLine is partially visible");
    rectangle(xmin,ymin,xmax,ymax);
    line(x1,y1,x2,y2);
    getch();

if((start[2]==0)&&(start[3]==1))
{
     x1=x1+(ymin-y1)/m;
     y1=ymin;
}
if((end[2]==0)&&(end[3]==1))
{
     x2=x2+(ymin-y2)/m;
     y2=ymin;
}
if((start[2]==1)&&(start[3]==0))
{
     x1=x1+(ymax-y1)/m;
     y1=ymax;
}
if((end[2]==1)&&(end[3]==0))
{
     x2=x2+(ymax-y2)/m;
     y2=ymax;
}
if((start[1]==0)&&(start[0]==1))
{
     y1=y1+m*(xmin-x1);
     x1=xmin;
}
if((end[1]==0)&&(end[0]==1))
{
     y2=y2+m*(xmin-x2);
     x2=xmin;
}
if((start[1]==1)&&(start[0]==0))
{
     y1=y1+m*(xmax-x1);
     x1=xmax;
}
if((end[1]==1)&&(end[0]==0))
{
     y2=y2+m*(xmax-x2);
     x2=xmax;
}

clrscr();
cleardevice();
printf("\n\t\tAfter clippling:");
rectangle(xmin,ymin,xmax,ymax);
line(x1,y1,x2,y2);
getch();
}
}
else
{
    clrscr();
    cleardevice();
    printf("\nLine is invisible");
    rectangle(xmin,ymin,xmax,ymax);
}
getch();
closegraph();
}
Input:
Please enter the bottom left co-ordinate of viewport: 100 100
Please enter the top right co-ordinate of viewport: 400 400
Please enter the coordinates for starting point of line: 120 60
Please enter the coordinates for ending point of line: 350 450
Output:


1 comment: