#include<iostream.h> #include<conio.h> #include<math.h> #include<graphics.h> #include<dos.h> #include<process.h> int pixels[2][4]; float xn1,xn2,yn1,yn2,x3,y3,m; void show_quadrant() { cleardevice(); rectangle(120,40,320,240); rectangle(320,40,520,240); rectangle(120,240,320,440); rectangle(320,240,520,440); for(int i=130;i<=510;i+=10) { if(i==320) continue; outtextxy(i,237,\"+\"); } for(i=50;i<=430;i+=10) { if(i==240) continue; outtextxy(317,i,\"-\"); } outtextxy(310,230,\"O\"); outtextxy(530,240,\"X\"); outtextxy(320,450,\"-Y\"); outtextxy(100,240,\"-X\"); outtextxy(320,30,\"Y\"); } void su_co(int x1,int y1,int x2,int y2,int xmin,int ymin,int xmax,int ymax) { int i,j,fl; for(i=0;i<2;i++) for(j=0;j<4;j++) pixels[i][j]=0; if(y1>ymax) pixels[0][0]=1; if(y1<ymin) pixels[0][1]=1; if(x1>xmax) pixels[0][2]=1; if(x1<xmin) pixels[0][3]=1; if(y2>ymax) pixels[1][0]=1; if(y2<ymin) pixels[1][1]=1; if(x2>xmax) pixels[1][2]=1; if(x2<xmin) pixels[1][3]=1; for(j=0;j<4;j++) { if(pixels[0][j]==0&&pixels[1][j]==0) continue; if(pixels[0][j]==1&&pixels[1][j]==1) { fl=3; break; } fl=2; } switch(fl) { case 1: line(320+x1,240-y1,320+x2,240-y2); break; case 3: cout<<\"\\n\\n\\a\\\" Line Is Not Visible...:-(\"; break; case 2: m=(y2-y1)/(x2-x1); xn1=x1; yn1=y1; xn2=x2; yn2=y2; if(pixels[0][0]==1) { xn1=x1+(ymax-y1)/m; yn1=ymax; } if(pixels[0][1]==1) { xn1=x1+(ymin-y1)/m; yn1=ymin; } if(pixels[0][2]==1) { yn1=y1+(xmax-x1)*m; xn1=xmax; } if(pixels[0][3]==1) { yn1=y1+(xmin-x1)*m; xn1=xmin; } if(pixels[1][0]==1) { xn2=x2+(ymax-y2)/m; yn2=ymax; } if(pixels[1][1]==1) { xn2=x2+(ymin-y2)/m; yn2=ymin; } if(pixels[1][2]==1) { yn2=y2+(xmax-x2)*m; xn2=xmax; } if(pixels[1][3]==1) { yn2=y2+(xmin-x2)*m; xn2=xmin; } line(320+xn1,240-yn1,320+xn2,240-yn2); break; } } void midpt(int x1,int y1,int x2,int y2,int xmin,int ymin,int xmax,int ymax) { int fl=1; int i,j; int ox1=x1,ox2=x2,oy1=y1,oy2=y2; for(i=0;i<2;i++) for(j=0;j<4;j++) pixels[i][j]=0; if(y1>ymax) pixels[0][0]=1; if(y1<ymin) pixels[0][1]=1; if(x1>xmax) pixels[0][2]=1; if(x1<xmin) pixels[0][3]=1; if(y2>ymax) pixels[1][0]=1; if(y2<ymin) pixels[1][1]=1; if(x2>xmax) pixels[1][2]=1; if(x2<xmin) pixels[1][3]=1; for(j=0;j<4;j++) { if(pixels[0][j]==0&&pixels[1][j]==0) continue; if(pixels[0][j]==1&&pixels[1][j]==1) { fl=3; break; } fl=2; } switch(fl) { case 1: line(320+x1,240-y1,320+x2,240-y2); break; case 3: cout<<\"\\n\\n\\a\\\" Line Is Not Visible...:-(\"; break; case 2: xn1=x1; yn1=y1; xn2=x2; yn2=y2; fl=0; x3=x1; y3=y1; while(1) { if(!(y1>ymax || y1<ymin || x1>xmax || x1<xmin) && (x3 || y3)!=0.1) break; x3=(x1+x2)/2; y3=(y1+y2)/2; if(!(y3>ymax || y3<ymin || x3>xmax || x3<xmin)) fl=1; else fl=0; if(fl) { x2=x3; y2=y3; } else { x1=x3; y1=y3; } } xn1=x3; yn1=y3; fl=0; x1=ox1; x2=ox2; y1=oy1; y2=oy2; x3=x2; y3=y2; while(1) { if(!(y2>ymax || y2<ymin || x2>xmax || x2<xmin) && (x3 || y3)!=0.1) break; x3=(x1+x2)/2; y3=(y1+y2)/2; if(!(y3>ymax || y3<ymin || x3>xmax || x3<xmin)) fl=1; else fl=0; if(fl) { x1=x3; y1=y3; } else { x2=x3; y2=y3; } } xn2=x3; yn2=y3; line(320+xn1,240-yn1,320+xn2,240-yn2); break; } } void show_message() { char *mess[]={\"-\",\"=\",\"[\",\" \",\"L\",\"i\",\"n\",\"e\",\" \",\"C\",\"l\",\"i\", \"p\",\"p\",\"i\",\"n\",\"g\",\" \",\"]\",\"=\",\"-\",}; int xx=29,xxx=50,i,j; _setcursortype(_NOCURSOR); for(i=0,j=21;i<13,j>=11;i++,j--) { gotoxy(xx,1); cout<<mess[i]; xx++; gotoxy(xxx,1); cout<<mess[j]; xxx--; delay(50); } _setcursortype(_NORMALCURSOR); } void main() { clrscr(); int gd=DETECT,gm,i,j; int xmin,ymin,xmax,ymax,x1,y1,x2,y2; int choice,ed[20],num; show_message(); cout<<\"\\n\\n\\t\\t\\\" Enter The Co-Ordinates Of The Clipping Window.\\\"\"; cout<<\"\\n\\n\\t\\t\\\" Enter X(min) & Y(min) \\\":=\"; cin>>xmin>>ymin; cout<<\"\\n\\t\\t\\\" Enter X(max) & Y(max) \\\":=\"; cin>>xmax>>ymax; cout<<\"\\n\\t\\t\\\" Enter The Co-Ordinates Of The Line.\\\"\"; cout<<\"\\n\\n\\t\\t\\\" Enter X(1) & Y(1) \\\":=\"; cin>>x1>>y1; cout<<\"\\n\\t\\t\\\" Enter X(2) & Y(2) \\\":=\"; cin>>x2>>y2; clrscr(); show_message(); cout<<\"\\n\\n\\n\\t\\t1:==>\\\" Sutherland-Cohen \\\"\"; cout<<\"\\n\\n\\t\\t2:==>\\\" Mid-Point Method \\\"\"; cout<<\"\\n\\n\\t\\t3:==>\\\" Exit \\\"\"; cout<<\"\\n\\n\\t\\t\\\" Enter Your Choice \\\":=\"; cin>>choice; switch(choice) { case 1: initgraph(&gd,&gm,\"..\\\\bgi\"); clearviewport(); show_quadrant(); line(320+xmin,240-ymin,320+xmin,240-ymax); line(320+xmin,240-ymax,320+xmax,240-ymax); line(320+xmax,240-ymax,320+xmax,240-ymin); line(320+xmax,240-ymin,320+xmin,240-ymin); line (320+x1,240-y1,320+x2,240-y2); getch(); cleardevice(); show_quadrant(); line(320+xmin,240-ymin,320+xmin,240-ymax); line(320+xmin,240-ymax,320+xmax,240-ymax); line(320+xmax,240-ymax,320+xmax,240-ymin); line(320+xmax,240-ymin,320+xmin,240-ymin); su_co(x1,y1,x2,y2,xmin,ymin,xmax,ymax); getch(); break; case 2: initgraph(&gd,&gm,\"..\\\\bgi\"); clearviewport(); show_quadrant(); line(320+xmin,240-ymin,320+xmin,240-ymax); line(320+xmin,240-ymax,320+xmax,240-ymax); line(320+xmax,240-ymax,320+xmax,240-ymin); line(320+xmax,240-ymin,320+xmin,240-ymin); line (320+x1,240-y1,320+x2,240-y2); getch(); cleardevice(); show_quadrant(); line(320+xmin,240-ymin,320+xmin,240-ymax); line(320+xmin,240-ymax,320+xmax,240-ymax); line(320+xmax,240-ymax,320+xmax,240-ymin); line(320+xmax,240-ymin,320+xmin,240-ymin); midpt(x1,y1,x2,y2,xmin,ymin,xmax,ymax); getch(); break; case 3: exit(0); default: cout<<\"\\n\\t\\a\\\" Press A Valid Key...!!! \\\"\"; getch(); main(); break; } closegraph(); }