#include <conio.h>
#include <iostream.h>
#include <graphics.h>
typedefstruct coordinate
{
intx,y;
char
code[4];
}PT;
voiddrawwindow();
voiddrawline (PT p1,PT p2,int cl);
PT setcode(PT p);
int visibility (PT p1,PT p2);
PT resetendpt (PT p1,PT p2);
main()
{
intgd=DETECT,
gm,v;
PT
p1,p2,ptemp;
initgraph(&gd,&gm,"C:\\TurboC3\\bgi");
cleardevice();
cout<<"\n\n\t\tENTER
END-POINT 1 (x,y): ";
cin>>p1.x>>p1.y;
cout<<"\n\n\t\tENTER
END-POINT 2 (x,y): ";
cin>>p2.x>>p2.y;
cleardevice();
drawwindow();
getch();
drawline(p1,p2,15);
getch();
p1=setcode(p1);
p2=setcode(p2);
v=visibility(p1,p2);
switch(v)
{
case
0:
cleardevice();
/* Line conpletely visible */
drawwindow();
drawline(p1,p2,15);
break;
case
1:
cleardevice();
/* Line completely invisible */
drawwindow();
break;
case
2: cleardevice(); /* line partly
visible */
p1=resetendpt
(p1,p2);
p2=resetendpt(p2,p1);
drawwindow();
drawline(p1,p2,15);
break;
}
getch();
closegraph();
return(0);
}
voiddrawwindow()
{
setcolor(RED);
line(150,100,450,100);
line(450,100,450,350);
line(450,350,150,350);
line(150,350,150,100);
}
voiddrawline (PT p1,PT p2,int cl)
{
setcolor(cl);
line(p1.x,p1.y,p2.x,p2.y);
}
PT setcode(PT p)
{
PT
ptemp;
if(p.y<100)
ptemp.code[0]='1';
else
ptemp.code[0]='0';
if(p.y>350)
ptemp.code[1]='1';
else
ptemp.code[1]='0';
if
(p.x>450)
ptemp.code[2]='1';
else
ptemp.code[2]='0';
if
(p.x<150) /* LEFT */
ptemp.code[3]='1';
else
ptemp.code[3]='0';
ptemp.x=p.x;
ptemp.y=p.y;
return(ptemp);
}
int visibility (PT p1,PT p2)
{
inti,flag=0;
for(i=0;i<4;i++)
{
if((p1.code[i]!='0')||(p2.code[i]!='0'))
flag=1;
}
if(flag==0)
return(0);
for(i=0;i<4;i++)
{
if((p1.code[i]==p2.code[i])
&&(p1.code[i]=='1'))
flag=0;
}
if(flag==0)
return(1);
return(2);
}
PT resetendpt (PT p1,PT p2)
{
PT
temp;
intx,y,i;
floatm,k;
if(
p1.code[3]=='1')
x=150;
if(p1.code[2]=='1')
x=450;
if((p1.code[3]=='1')||(p1.code[2]=='1'))
{
m=(float)
(p2.y-p1.y)/(p2.x-p1.x);
k=(p1.y+(m*(x-p1.x)));
temp.y=k;
temp.x=x;
for(i=0;i<4;i++)
temp.code[i]=p1.code[i];
if(temp.y<=350&&temp.y>=100)
return(temp);
}
if(p1.code[0]=='1')
y=100;
if(p1.code
[1]=='1')
y=350;
if((p1.code[0]=='1')||(p1.code[1]=='1'))
{
m=(float)(p2.y-p1.y)/(p2.x-p1.x);
k=(float)p1.x+(float)(y-p1.y)/m;
temp.x=k;
temp.y=y;
for(i=0;i<4;i++)
temp.code[i]=p1.code[i];
return(temp);
}
else
return(p1);
}
No comments:
Post a Comment