#include #include #include #include int cliptest(float,float,float&,float&); void main() { int wx1,wx2,wy1,wy2,lx1,lx2,ly1,ly2; int d=DETECT,m,x1,y1; float dx,dy,u1,u2; initgraph(&d,&m,"\\borlandc\\bgi"); cout<<"enter the window coordinate:"; cin>>wx1>>wy1>>wx2>>wy2; cout<<"enter the line coordinate:"; cin>>lx1>>ly1>>lx2>>ly2; x1=lx1;y1=ly1; clrscr(); outtext("before clipping"); rectangle(wx1,wy1,wx2,wy2); line(lx1,ly1,lx2,ly2); getch(); clrscr(); u1=0.0; u2=1.0; dx=lx2-lx1; if(cliptest(-dx,lx1-wx1,u1,u2)) if(cliptest(dx,wx2-lx1,u1,u2)) { dy=ly2-ly1; if(cliptest(-dy,ly1-wy1,u1,u2)) if(cliptest(dy,wy2-ly1,u1,u2)) { if(u1>0.0) { lx1=x1+u1*dx; ly1=y1+u1*dy; } if(u2<1.0) { lx2=x1+u2*dx; ly2=y1+u2*dy; } } } outtext("after clipping"); rectangle(wx1,wy1,wx2,wy2); if((cliptest(-dx,lx1-wx1,u1,u2))&& (cliptest(dx,wx2-lx1,u1,u2))&& (cliptest(-dy,ly1-wy1,u1,u2))&& (cliptest(dy,wy2-wx1,u1,u2))) line(lx1,ly1,lx2,ly2); getch(); } int cliptest(float p,float q,float &u1,float &u2) { float r; int g; g=1; if(p<0.0) { r=q/p; if(r>u2) g=0; else if(r>u1) u1=r; } if(p>0.0) { r=q/p; if(r