#include<iostream.h>
#include<conio.h>
#include<graphics.h>constintMAX=100;structpoint{floatx;floaty;intvalid;};structbox{intxx,yx,yn,xn;}b;intinside(pointp,intj){if(j==0&&p.x<b.xn)return0;if(j==1&&p.x>b.xx)return0;if(j==2&&p.y<b.yn)return0;if(j==3&&p.y>b.yx)return0;return1;}pointintersect(pointp1,pointp2,intj){floatm;m=(p2.y-p1.y)/(p2.x-p1.x);pointp;p.valid=1;switch(j){case0:{p.x=b.xn;if(p1.y==p2.y)p.y=p1.y;elsep.y=p2.y+(b.xn-p2.x)*m;break;}case1:{p.x=b.xx;if(p1.y==p2.y)p.y=p1.y;elsep.y=p2.y+(b.xx-p2.x)*m;break;}case2:{p.y=b.yn;if(p1.x==p2.x)p.x=p1.x;elsep.x=p2.x+(b.yn-p2.y)/m;break;}case3:{p.y=b.yx;if(p1.x==p2.x)p.x=p1.x;elsep.x=p2.x+(b.yx-p2.y)/m;break;}}returnp;}voidmain(){pointpt[MAX],s[MAX];intgdriver=DETECT,gmode=VGAHI;initgraph(&gdriver,&gmode,"");b.xx=getmaxx()/4;b.xn=-getmaxx()/4;b.yn=-getmaxy()/4;b.yx=getmaxy()/4;rectangle(getmaxx()/2+b.xn,getmaxy()/2-b.yn,b.xx+getmaxx()/2,getmaxy()/2-b.yx);charcho='y';intcount=0;while(cho=='y'){cout<<"Enter x for pt "<<count+1<<" ";cin>>pt[count].x;cout<<"Enter y for pt "<<count+1<<" ";cin>>pt[count].y;pt[count].valid=1;cout<<"Enter more ";cho=getche();count++;}setcolor(BLUE);for(inti=count;i<MAX;i++)pt[i].valid=0;intncount=count;count=0;for(intj=0;j<4;j++){for(i=0;i<ncount;i++){if(inside(pt[i],j)&&inside(pt[(i+1)%ncount],j)){s[count++]=pt[(i+1)%ncount];}elseif(inside(pt[i],j)&&!inside(pt[(i+1)%ncount],j)){s[count++]=intersect(pt[i],pt[(i+1)%ncount],j);}elseif(!inside(pt[i],j)&&inside(pt[(i+1)%ncount],j)){s[count++]=intersect(pt[i],pt[(i+1)%ncount],j);s[count++]=pt[(i+1)%ncount];}}for(intk=0;k<count;k++)pt[k]=s[k];for(k=count;k<MAX;k++)pt[k].valid=0;ncount=count;count=0;}for(i=0;i<ncount;i++)line(getmaxx()/2+pt[i].x,getmaxy()/2-pt[i].y,getmaxx()/2+pt[(i+1)%ncount].x,getmaxy()/2-pt[(i+1)%ncount].y);}