Thursday, November 18, 2010

Line Clipping in C

#include<stdio.h>
#include<conio.h>
#include<graphics.h>
int xwmin,ywmin,xwmax,ywmax;
void rcode(int,int,int []);
int check(int[],int[]);
void main()
{
int gdriver = DETECT, gmode, errorcode;
int x1,y1,x2,y2,code1[4],code2[4],x,y,m;
int point[2][2],p=0;
initgraph(&gdriver, &gmode, "c:/tc/bgi");
errorcode = graphresult();
if (errorcode != grOk)
{
printf("Graphics error: %s\n", grapherrormsg(errorcode));
printf("Press any key to halt:");
getch();
exit(1);
}
printf("\n Enter the coordinates of window ");
printf("\n xwmin and ywmin: ");
scanf("%d%d",&xwmin,&ywmin);
printf("\n xwmax and ywmax: ");
scanf("%d%d",&xwmax,&ywmax);
printf("\n Enter the coordinates of line ");
printf("\n Enter the coordinate for the first end point of the line: ");
scanf("%d%d",&x1,&y1);
printf("\n Enter the coordinate for the second end point of the line: ");
scanf("%d%d",&x2,&y2);
rcode(x1,y1,code1);
rcode(x2,y2,code2);

if(check(code1,code2)==1)
{
rectangle(xwmin,ywmin,xwmax,ywmax);
printf("1");
}
else
{
m=(y2-y1)/(x2-x1);
rectangle(xwmin,ywmin,xwmax,ywmax);
line(x1,y1,x2,y2);
setcolor(4);
if(x1<xwmin)
{
y=y1+m*(xwmin-x1);
x=xwmin;
x1=x;
y1=y;
}
if(x2>xwmax)
{
y=y2+m*(xwmax-x2);
x=xwmax;
x2=x;
y2=y;
}
if(y1<ywmin)
{
x=x1+(ywmin-y1)/m;
y=ywmin;
x1=x;
y1=y;
}
if(y2>ywmax)
{
x=x2+(ywmax-y2)/m;
y=ywmax;
x2=x;
y2=y;
}


line(x1,y1,x2,y2);

}
getch();
}

int check(int code1[],int code2[])
{
int flag=0;
if(code1[3]==1&&code2[3]==1)
flag=1;
if(code1[2]==1&&code2[2]==1)
flag=1;
if(code1[1]==1&&code2[1]==1)
flag=1;
if(code1[0]==1&&code2[0]==1)
flag=1;

return flag;
}

void rcode(int x,int y,int code[])
{
if(y>ywmax)//bottom
code[2]=1;
else
code[2]=0;
if(y<ywmin)//top
code[3]=1;
else
code[3]=0;
if(x>xwmax)//right
code[1]=1;
else
code[1]=0;
if(x<xwmin)//left
code[0]=1;
else
code[0]=0;
}

0 comments:

Post a Comment

Contact Form

Name

Email *

Message *