Write a Program in C++ to clip a line using Liang Barsky Method

 

Write a Program in C++ to clip a line using Liang Barsky Method

  1. #include<iostream.h>  
  2. #include <stdio.h>  
  3. #include<conio.h>  
  4. #include<graphics.h>  
  5. #include<process.h>  
  6. class liang  
  7. {  
  8.     float x1,x2,y1,y2,u1,u2,dx,dy,xm,ym;  
  9.     float xmin, ymin, xmax, ymax,p[4],q[4],r[5],r[5];  
  10.     int gd, gm, test, s, k;  
  11.     public:  
  12.     void clipliang();  
  13.     void get();  
  14.     void map();  
  15.     void graph();  
  16. };  
  17. void liang :: map()  
  18. {  
  19.     gd=DETECT;  
  20.     initgraph (&gd, &gm, "");  
  21.     int errorcode = graphresult();  
  22.     /*an error occurred */  
  23.            if (errorcode!=grOK)  
  24.     {  
  25.         printf("Graphics error: %s \n",grapherrormsg (errorcode));  
  26.                       printf("Press and key to halt: ");  
  27.                       getch();  
  28.                       exit(1); /* terminate with an error code */  
  29.             }  
  30. }  
  31. void liang::graph()  
  32. {  
  33.     xm=getmaxx()/2;  
  34.     ym=getmaxy()/2;  
  35.     line (xm, 0, xm, 2 * ym);  
  36.     line (0, ym, 2 * xm, ym);  
  37. }  
  38. void liang :: get()  
  39. {  
  40.     cout<<"\n ENTER WINDOW COORDINATES xwmin, ywmin, xwmax, ywmax";  
  41.     cin>>xmin>>ymin>>xmax>>ymax>>;  
  42.     rectangle (xmin+xm,-ymin+ym,xmax+xm, -ymax+ym);  
  43.        //  rectangle (320+xwmin, 240-ywmax, 320+xwmax, 240-ywmin);  
  44.            cout<<"\n ENTER END POINTS OF LINE (x1, y1)(x2, y2) ";  
  45.            cin>>x1>>y1>>x2>>y2;  
  46.     line (x1+xm,-y1+ym, x2+xm,-y2+ym);  
  47.     getch();  
  48. }  
  49.        // line (x1, y1, x2, y2);  
  50. void liang :: clipliang()  
  51. {  
  52.     float x=0, y=1;  
  53.     dx=x2-x1;  
  54.     dy=y2-y1;  
  55.     p[0]=-dx;  
  56.     p[1]=dx;  
  57.     p[2]=-dy;  
  58.     p[3]=dy;  
  59.     q[0]=x1-xmin;  
  60.     q[1]=xmax-x1;  
  61.     q[2]=y1-ymin;  
  62.     q[3]=ymax-y1;  
  63.     for (k=0;k<4;k++)  
  64.     {  
  65.         if (p[k]==0&&q[k]<0)  
  66.         {  
  67.             cout<<"\n OUTSIDE";  
  68.                                  getch();  
  69.                                  exit(0);  
  70.                       }  
  71.                        if (p[k]<0)  
  72.                {  
  73.             r[k]=q[k]/p[k];  
  74.             if (r1[k]<y)  
  75.                y=r1[k];  
  76.                   u2=y;  
  77.         }  
  78.     }  
  79.         if (u1>u2)  
  80.         {  
  81.             cout<<"\n COMPLETE OUTSIDE WINDOW";  
  82.                                  getch();  
  83.                                  exit(0);  
  84.                         }  
  85. void main ()  
  86. {  
  87.     liang1;  
  88.     clrscr();  
  89.     l.map();  
  90.     l.graph();  
  91.     l.get();  
  92.     l.clipliang();  
  93.     getch();  
  94. }  

Output

Computer Graphics Programs

Post a Comment

Previous Post Next Post