Practical No.
- 8[A]
                                 Cohen-Surtherland Clipping Algorithm
Source Code:
   1. #include<graphics.h>
   2. #include<conio.h>
   3. #include<stdio.h>
   4. #include<math.h>
   5. int main()
   6. {
   7. int rcode_begin[4]={0,0,0,0},rcode_end[4]={0,0,0,0},region_code[4];
   8. int W_xmax,W_ymax,W_xmin,W_ymin,flag=0;
   9. float slope;
   10. int x,y,x1,y1,i, xc,yc;
   11. int gr=DETECT,gm;
   12. initgraph(&gr,&gm,"C:\\TURBOC3\\BGI");
   13. printf("\n****** Cohen Sutherland Line Clipping algorithm ***********");
   14. printf("\n Now, enter XMin, YMin =");
   15. scanf("%d %d",&W_xmin,&W_ymin);
   16. printf("\n First enter XMax, YMax =");
   17. scanf("%d %d",&W_xmax,&W_ymax);
   18. printf("\n Please enter intial point x and y= ");
   19. scanf("%d %d",&x,&y);
   20. printf("\n Now, enter final point x1 and y1= ");
   21. scanf("%d %d",&x1,&y1);
   22. cleardevice();
23. rectangle(W_xmin,W_ymin,W_xmax,W_ymax);
24. line(x,y,x1,y1);
25. line(0,0,600,0);
26. line(0,0,0,600);
27. if(y>W_ymax)       {
28. rcode_begin[0]=1;          // Top
29. flag=1 ;
30. }
31. if(y<W_ymin) {
32. rcode_begin[1]=1;                   // Bottom
33. flag=1;
34. }
35. if(x>W_xmax)       {
36. rcode_begin[2]=1;                   // Right
37. flag=1;
38. }
39. if(x<W_xmin)           {
40. rcode_begin[3]=1;                   //Left
41. flag=1;
42. }
43. //end point of Line
44. if(y1>W_ymax){
45. rcode_end[0]=1;                 // Top
46. flag=1;
47. }
48. if(y1<W_ymin) {
49. rcode_end[1]=1;                 // Bottom
50. flag=1;
51. }
52. if(x1>W_xmax){
53. rcode_end[2]=1;                 // Right
54. flag=1;
55. }
56. if(x1<W_xmin){
57. rcode_end[3]=1;                 //Left
58. flag=1;
59. }
60. if(flag==0)
61. {
62. printf("No need of clipping as it is already in window");
63. }
64. flag=1;
65. for(i=0;i<4;i++){
66. region_code[i]= rcode_begin[i] && rcode_end[i] ;
67. if(region_code[i]==1)
68. flag=0;
69. }
70. if(flag==0)
71. {
72. printf("\n Line is completely outside the window");
73. }
74. else{
75. slope=(float)(y1-y)/(x1-x);
76. if(rcode_begin[2]==0 && rcode_begin[3]==1)   //left
77. {
78. y=y+(float) (W_xmin-x)*slope ;
79. x=W_xmin;
80. }
81. if(rcode_begin[2]==1 && rcode_begin[3]==0)        // right
82. {
83. y=y+(float) (W_xmax-x)*slope ;
84. x=W_xmax;
85.
86. }
87. if(rcode_begin[0]==1 && rcode_begin[1]==0)       // top
88. {
89. x=x+(float) (W_ymax-y)/slope ;
90. y=W_ymax;
91.
92. }
93. if(rcode_begin[0]==0 && rcode_begin[1]==1)     // bottom
94. {
95. x=x+(float) (W_ymin-y)/slope ;
96. y=W_ymin;
97. }
98. // end points
99. if(rcode_end[2]==0 && rcode_end[3]==1)   //left
100.{
101.y1=y1+(float) (W_xmin-x1)*slope ;
102.x1=W_xmin;
103.}
104.if(rcode_end[2]==1 && rcode_end[3]==0)            // right
105.{
106.y1=y1+(float) (W_xmax-x1)*slope ;
107.x1=W_xmax;
108.
109.}
110.if(rcode_end[0]==1 && rcode_end[1]==0)       // top
111.{
112.x1=x1+(float) (W_ymax-y1)/slope ;
113.y1=W_ymax;
114.
115.}
116.if(rcode_end[0]==0 && rcode_end[1]==1)      // bottom
117.{
118.x1=x1+(float) (W_ymin-y1)/slope ;
119.y1=W_ymin;
120.}
121.}
122.delay(1000);
   123.clearviewport();
   124.rectangle(W_xmin,W_ymin,W_xmax,W_ymax);
   125.line(0,0,600,0);
   126.line(0,0,0,600);
   127.setcolor(RED);
   128.line(x,y,x1,y1);
   129.getch();
   130.closegraph();
   131.}
Output:
                                             Practical No.-8[B]
                               Liang-Barsky Line Clipping Algorithm
Source Code:
   1. #include<graphics.h>
   2. #include<dos.h>
   3. #include<stdio.h>
   4. #include<math.h>
   5. int main()
   6. {
   7.          int i,gd=DETECT,gm;
   8.          int x1,y1,x2,y2,xmin,xmax,ymin,ymax,xx1,xx2,yy1,yy2,dx,dy;
   9.          float t1,t2,p[4],q[4],temp;
   10.         x1=120;
   11.         y1=120;
   12.         x2=300;
   13.         y2=300;
   14.         xmin=100;
   15.         ymin=100;
   16.         xmax=250;
   17.         ymax=250;
   18.         initgraph(&gd,&gm,"c:\\turboc3\\bgi");
   19.         rectangle(xmin,ymin,xmax,ymax);
   20.         dx=x2-x1;
   21.         dy=y2-y1;
   22.         p[0]=-dx;
23.   p[1]=dx;
24.   p[2]=-dy;
25.   p[3]=dy;
26.   q[0]=x1-xmin;
27.   q[1]=xmax-x1;
28.   q[2]=y1-ymin;
29.   q[3]=ymax-y1;
30.   for(i=0;i<4;i++)
31.   {
32.           if(p[i]==0)
33.           {
34.                      printf("line is parallel to one of the clipping boundary");
35.                      if(q[i]>=0)
36.                      {
37.                              if(i<2)
38.                              {
39.                                        if(y1<ymin)
40.                                        {
41.                                                y1=ymin;
42.                                        }
43.                                        if(y2>ymax)
44.                                        {
45.                                                y2=ymax;
46.                                        }
47.                                        line(x1,y1,x2,y2);
48.
49.                              }
50.                              if(i>1)
51.                             {
52.                                     if(x1<xmin)
53.                                     {
54.                                             x1=xmin;
55.                                     }
56.                                     if(x2>xmax)
57.                                     {
58.                                             x2=xmax;
59.                                     }
60.                                     line(x1,y1,x2,y2);
61.                             }
62.                      }
63.           }
64.   }
65.   t1=0;
66.   t2=1;
67.   for(i=0;i<4;i++)
68.   {
69.           temp=q[i]/p[i];
70.           if(p[i]<0)
71.           {
72.                      if(t1<=temp)
73.                      t1=temp;
74.           }
75.           else
76.           {
77.                      if(t2>temp)
78.                      t2=temp;
   79.             }
   80.     }
   81.     if(t1<t2)
   82.     {
   83.             xx1=x1+t1*p[1];
   84.             xx2=x1+t2*p[1];
   85.             yy1=y1+t1*p[3];
   86.             yy2=y1+t2*p[3];
   87.             line(xx1,yy1,xx2,yy2);
   88.     }
   89.     delay(5000);
   90.     closegraph();
   91. }
Output:
                                               Practical No.-9[A]
                                            Flood Fill Algorithm
Source Code:
   1. #include<stdio.h>
   2. #include<conio.h>
   3. #include<graphics.h>
   4. #include<dos.h>
   5. int flood(int x, int y ,int newcolor, int oldcolor)
   6. {
   7.           if(getpixel(x,y)== oldcolor)
   8.           {
   9.                      putpixel(x,y,newcolor);
   10.                     delay(10);
   11.                     flood(x+1,y, newcolor, oldcolor);
   12.                     flood(x,y+1, newcolor, oldcolor);
   13.                     flood(x-1,y, newcolor, oldcolor);
   14.                     flood(x,y-1, newcolor, oldcolor);
   15.          }
   16. }
   17. int main()
   18. {
   19.          int gd = DETECT,gm;
   20.          initgraph(&gd,&gm, "c:/tc/bgi");
   21.          rectangle(250,200,300,250);
   22.          flood(251,201,4,0);
   23.          getch();
   24.          closegraph();
   25. }
Output:
                                              Practical No.-9[B]
                                          Boundary Fill Algorithm
Source Code:
   1. #include<graphics.h>
   2. void boundaryfill4(int x, int y ,int fill_color, int boun_color)
   3. {
   4.          if(getpixel(x,y)!=boun_color && getpixel(x,y)!=fill_color)
   5.          {
   6.                     putpixel(x,y,fill_color);
   7.                     delay(5);
   8.                     boundaryfill4(x+1,y, fill_color, boun_color);
   9.                     boundaryfill4(x,y+1, fill_color, boun_color);
   10.                    boundaryfill4(x-1,y, fill_color, boun_color);
   11.                    boundaryfill4(x,y-1, fill_color, boun_color);
   12.         }
   13. }
   14. int main()
   15. {
   16.         int gm,gd = DETECT;
   17.         initgraph(&gm,&gd,"c:/tc/bgi");
   18.      int x = 200, y = 140, radius = 60;
   19.      circle(x,y,radius);
   20.      boundaryfill4(x,y,6,15);
   21.         getch();
   22.         closegraph();
   23.         return 0;
   24. }
Output:
                                        Practical No.-10
                                          Scenery View
Source Code:
#include<stdio.h>
#include<conio.h>
#include<graphics.h>
#include<cmath>
int main()
          initwindow(1200,600,"SIMPLE CITY SCENARIO");
          for(int j=0;j<1200;j+=3)
    //HILLS
          setcolor(6);
          setfillstyle(SOLID_FILL,6);
          line(0,350,50,250);
          line(50,250,150,350);
          line(150,350,250,200);
          line(250,200,450,350);
          line(450,350,700,190);
          line(700,190,900,350);
          line(900,350,1050,250);
          line(1050,250,1200,350);
          line(0,350,1200,350);
        floodfill(5,340,6);
        setbkcolor(2);
// Drawing the bird
        line(50+j,50,70+j,70);
        line(70+j,70,50+j,90);
        line(80+j,80,100+j,100);
        line(100+j,100,80+j,110);
        line(150+j,60,170+j,80);
        line(170+j,80,150+j,100);
//1st cloud
        setcolor(15);
        setfillstyle(SOLID_FILL,15);
        ellipse(100-j,50,-20,200,25,20);
        ellipse(125-j,70,240,110,20,20);
        ellipse(100-j,90,170,380,20,20);
        ellipse(80-j,70,70,290,20,20);
        floodfill(100-j,60,15);
//2nd cloud
        setcolor(15);
        setfillstyle(SOLID_FILL,15);
        ellipse(500-j,105,0,180,30,25);
        ellipse(530-j,130,285,90,40,30);
        ellipse(515-j,160,210,360,25,30);
        ellipse(480-j,150,180,300,30,30);
        ellipse(470-j,130,85,235,30,25);
        floodfill(500-j,140,15);
// 3rd clouds
        setcolor(WHITE);
        setfillstyle(SOLID_FILL,WHITE);
        ellipse(900-j,50,-20,200,25,20);
        ellipse(925-j,70,240,110,20,20);
        ellipse(900-j,90,170,380,20,20);
        ellipse(880-j,70,70,290,20,20);
        floodfill(900-j,60,WHITE);
// Draw Sun
        setcolor(YELLOW);
        setfillstyle(SOLID_FILL, YELLOW);
        circle(700, 100, 40);
        floodfill(700, 100, YELLOW);
        // Draw Sun Rays
        setcolor(YELLOW);
        for (int i = 0; i < 360; i += 30) {
        line(700, 100, 700 + 60 * cos(i * 3.14 / 180), 100 + 60 * sin(i * 3.14 / 180));
// building
        setcolor(4);
        setfillstyle(HATCH_FILL,4);
        setbkcolor(3);
        rectangle(50,500,200,300);
floodfill(51,499,4);
setcolor(13);
setfillstyle(HATCH_FILL,13);
setbkcolor(12);
rectangle(350,500,450,300);
floodfill(351,499,13);
setcolor(12);
setfillstyle(HATCH_FILL,12);
setbkcolor(5);
rectangle(450,500,500,350);
floodfill(451,499,12);
setcolor(9);
setfillstyle(HATCH_FILL,9);
setbkcolor(13);
rectangle(500,500,600,300);
floodfill(501,499,9);
setcolor(3);
setfillstyle(HATCH_FILL,3);
setbkcolor(14);
rectangle(800,500,1000,300);
floodfill(801,499,3);
setcolor(12);
setfillstyle(HATCH_FILL,12);
setbkcolor(5);
rectangle(1000,500,1100,330);
         floodfill(1001,499,12);
//road
         setcolor(8);
         setfillstyle(SOLID_FILL,8);
         rectangle(0,500,1200,600);
         floodfill(10,510,8);
         setcolor(15);
         for(int i=0;i<1200;i+=70)
         line(0+i,550,50+i,550);
//CAR BODY
         setcolor(4);
         setfillstyle(SOLID_FILL,4);
         ellipse(0+j,537,0,180,16,16);
         ellipse(70+j,537,0,180,16,16);
         line(14+j,535,56+j,535);//center line
         line(84+j,535,101+j,535);//front line
         line(100+j,536,100+j,508);//front height
         line(101+j,510,93+j,504); //front bonet
         line(94+j,505,87+j,484);//driver view
         line(89+j,485,36+j,485);//ceiling
         line(37+j,484,37+j,516);//half join
         line(-14+j,535,-36+j,535);//back line
         line(-35+j,536,-35+j,514);//back height
        line(-36+j,515,38+j,515);//back height to half line
        floodfill(20+j,533, 4);
//wheel 1
        setcolor(0);
        setfillstyle(SOLID_FILL,0);
        pieslice(0+j,535,0-j,90-j,10);
        pieslice(0+j,535,180-j,270-j,10);
        circle(0+j,535,10);
       ellipse(0+j,537,0,180,16,16);
//wheel 2
       pieslice(70+j,535,0-j,90-j,10);
        pieslice(70+j,535,180-j,270-j,10);
        circle(70+j,535,10);
        ellipse(70+j,537,0,180,16,16);
//mirror
        setcolor(0);
        setfillstyle(SLASH_FILL,0);
        line(43+j,505,87+j,505);
        line(43+j,505,43+j,490);
        line(43+j,490,83+j,490);
        line(83+j,490,87+j,505);
        floodfill(78+j,500,0);
//mirror driver
        setcolor(0);
        setfillstyle(SLASH_FILL,0);
           rectangle(61.5+j,490,63.5+j,505);
           floodfill(62.5+j,500,0);
//background color
           setbkcolor(11);
//floodfill(j,520,6);
           delay(50);
           cleardevice();
getch();
closegraph();
Output:
                                                 Practical No. -7[B]
Source Code:
#include <stdio.h>
#include <graphics.h>
#include <stdlib.h>
#include <math.h>
#include <conio.h>
void reset (int h[][2])
     int val[9][2] = {
                              { 50, 50 },{ 75, 50 },{ 75, 75 },{ 100, 75 },
                              { 100, 50 },{ 125, 50 },{ 125, 100 },{ 87, 125 },{ 50, 100 }
                               };
     int i;
     for (i=0; i<9; i++)
              h[i][0] = val[i][0]-50;
              h[i][1] = val[i][1]-50;
void draw (int h[][2])
     int i;
     setlinestyle (DOTTED_LINE, 0, 1);
     line (320, 0, 320, 480);
     line (0, 240, 640, 240);
     setlinestyle (SOLID_LINE, 0, 1);
      for (i=0; i<8; i++)
               line (320+h[i][0], 240-h[i][1], 320+h[i+1][0], 240-h[i+1][1]);
      line (320+h[0][0], 240-h[0][1], 320+h[8][0], 240-h[8][1]);
void rotate (int h[][2], float angle)
      int i;
      for (i=0; i<9; i++)
               int xnew, ynew;
               xnew = h[i][0] * cos (angle) - h[i][1] * sin (angle);
               ynew = h[i][0] * sin (angle) + h[i][1] * cos (angle);
               h[i][0] = xnew; h[i][1] = ynew;
void scale (int h[][2], int sx, int sy)
      int i;
      for (i=0; i<9; i++)
               h[i][0] *= sx;
               h[i][1] *= sy;
void translate (int h[][2], int dx, int dy)
      int i;
      for (i=0; i<9; i++)
      {
              h[i][0] += dx;
              h[i][1] += dy;
void reflect (int h[][2], int m, int c)
              int i;
              float angle;
              for (i=0; i<9; i++)
                         h[i][1] -= c;
              angle = M_PI/2 - atan (m);
              rotate (h, angle);
              for (i=0; i<9; i++)
                         h[i][0] = -h[i][0];
              angle = -angle;
              rotate (h, angle);
              for (i=0; i<9; i++)
                         h[i][1] += c;
void ini()
              int gd=DETECT,gm;
              initgraph(&gd,&gm,"..\\bgi");
void dini()
              getch();
              closegraph();
}
int main()
             int h[9][2],sx,sy,x,y,m,c,choice;
             do
                        printf("1. Scaling about the origin.\n");
                        printf("2. Scaling about an arbitrary point.\n");
                        printf("3. Reflection about the line y = mx + c.\n");
                        printf("4. Exit\n");
                        printf("Enter the choice: ");
                        scanf("%d",&choice);
                        switch(choice)
                            case 1: printf ("Enter the x- and y-scaling factors: ");
                                                 scanf ("%d%d", &sx, &sy);
                                                 ini();
                                                 reset (h);
                                                 draw (h);getch();
                                                 scale (h, sx, sy);
                                                 cleardevice();
                                                 draw (h);
                                                 dini();
                                                 break;
                              case 2: printf ("Enter the x- and y-scaling factors: ");
                                               scanf ("%d%d", &sx, &sy);
                                                 printf ("Enter the x- and y-coordinates of the point: ");
                                                 scanf ("%d%d", &x, &y);
                                                 ini();
                                                 reset (h);
                                translate (h, x, y);// Go to arbitrary point
                                draw(h); getch();//Show its arbitrary position
                                cleardevice();
                                translate(h,-x,-y);//Take it back to origin
                                draw(h);
                                getch();
                                cleardevice();
                                scale (h, sx, sy);//Now Scale it
                                draw(h);
                                getch();
                                translate (h, x, y);//Back to Arbitrary point
                                cleardevice();
                                draw (h);
                                putpixel (320+x, 240-y, WHITE);
                                dini();
                                break;
                     case 3: printf ("Enter the values of m and c: ");
                                scanf ("%d%d", &m, &c);
                                ini();
                                reset (h);
                                draw (h); getch();
                                reflect (h, m, c);
                                cleardevice();
                                draw (h);
                                dini();
                                break;
                     case 4: exit(0);
}while(choice!=4);
}
Output: