Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Scan Line Polygon Fill Algorithm
- #include<iostream.h>
- #include<graphics.h>
- #include<conio.h>
- #include<stdio.h>
- #include<dos.h>
- struct data
- {
- int x;
- int y;
- };
- void main()
- {
- int side,i,j,gm,gd=DETECT,ctr=0;
- int maxy,maxx,miny,minx;
- data arr[20];
- initgraph(&gd,&gm,"c:\\tc\\bgi");
- cleardevice();
- printf("\n\nEnter the no of sides of polygon:");
- scanf("%d",&side);
- printf("\nEnter the x & y co-ordinate");
- for(i=0;i<side;i++)
- {
- printf("\n\t x[%d] : ",i+1);
- scanf("%d",&arr[i].x);
- printf("\t y[%d] : ",i+1);
- scanf("%d",&arr[i].y);
- }
- arr[i].x=arr[0].x;
- arr[i].y=arr[0].y;
- cleardevice();
- setcolor(RED); //draw poly
- for(i=0;i<side;i++)
- {
- line(arr[i].x,arr[i].y,arr[i+1].x,arr[i+1].y);
- }
- //to search min & max y coordinate and max x coordinate
- miny=arr[0].y;
- maxy=arr[0].y;
- maxx=arr[0].x;
- minx=arr[0].x;
- setcolor(YELLOW);
- for(i=0;i<side;i++)
- {
- if(miny>arr[i].y)
- miny=arr[i].y;
- if(maxy<arr[i].y)
- maxy=arr[i].y;
- if(maxx<arr[i].x)
- maxx=arr[i].x;
- if(minx>arr[i].x)
- minx=arr[i].x;
- }
- for(j=miny+1;j<maxy;j++) // fill poly
- {
- ctr=0;
- delay(20);
- for(i=minx-1;i<=maxx;i++)
- {
- if(getpixel(i,j)!=0)
- {
- arr[ctr].x=i;
- arr[ctr].y=j;
- ctr++;
- }
- if(ctr==2)
- {
- delay(20);
- line(arr[0].x+1,arr[0].y,arr[1].x-1,arr[1].y);
- ctr=0;
- }
- }
- }
- getch();
- }
- //midpoint of a circle
- #include<graphics.h>
- #include<stdio.h>
- #include<conio.h>
- #include<dos.h>
- #include<math.h>
- void main()
- {
- int gd=DETECT,gm,xc,yc,x,y,r,pk;
- initgraph(&gd,&gm,"c:\\tc\\bgi");
- printf("Enter co-ordinates of centre: ");
- scanf("%d%d",&xc,&yc);
- printf("Enter radius: ");
- scanf("%d",&r);
- x=0;
- y=r;
- putpixel(xc+x,yc+y,WHITE);
- pk=1-r;
- while(x<y)
- {
- if(pk<0)
- {
- x=x+1;
- pk=pk+(2*x)+1;
- }
- else
- {
- x=x+1;
- y=y-1;
- pk=pk+(2*x)-(2*y)+1;
- }
- putpixel(xc+x,yc+y,WHITE);
- putpixel(xc+y,yc+x,WHITE);
- putpixel(xc-y,yc+x,WHITE);
- putpixel(xc+x,yc-y,WHITE);
- putpixel(xc-x,yc-y,WHITE);
- putpixel(xc-y,yc-x,WHITE);
- putpixel(xc+y,yc-x,WHITE);
- putpixel(xc-x,yc+y,WHITE);
- }
- getch();
- closegraph();
- }
- //bressenham's line generation algorithm
- #include<graphics.h>
- #include<stdio.h>
- #include<conio.h>
- #include<dos.h>
- #include<math.h>
- void main()
- {
- int gd=DETECT,gm,x1,x2,y1,y2,dx,dy,p0,pk,x,y;
- float xinc,yinc;
- initgraph(&gd,&gm,"c:\\tc\\bgi");
- printf("Enter end point co-ordinates of line: ");
- scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
- dx=x2-x1;
- dy=y2-y1;
- x=x1;
- y=y1;
- putpixel(x,y,WHITE);
- if(abs(dx)>=abs(dy))
- {
- pk=2*abs(dy)-abs(dx);
- while(x!=x2||y!=y2)
- {
- if (pk<0)
- {
- xinc=dx/abs(dx);
- yinc=0;
- pk=pk+2*abs(dy);
- }
- else
- {
- xinc=dx/abs(dx);
- yinc=dy/abs(dy);
- pk=pk+(2*abs(dy))-(2*abs(dx));
- }
- x=x+xinc;
- y=y+yinc;
- putpixel(x,y,WHITE);
- }
- }
- else
- {
- pk=2*abs(dx)-abs(dy);
- while(x!=x2||y!=y2)
- {
- if (pk<0)
- {
- xinc=0;
- yinc=dy/abs(dy);
- pk=pk+2*abs(dx);
- }
- else
- {
- xinc=dx/abs(dx);
- yinc=dy/abs(dy);
- pk=pk+(2*abs(dx))-(2*abs(dy));
- }
- x=x+xinc;
- y=y+yinc;
- putpixel(x,y,WHITE);
- }
- }
- getch();
- closegraph();
- }
- //dda line drawing algorithm
- #include<graphics.h>
- #include<stdio.h>
- #include<conio.h>
- #include<dos.h>
- #include<math.h>
- void main()
- {
- int gd=DETECT,gm,x1,y1,x2,y2,step,dx,dy,x,y;
- float xinc,yinc;
- initgraph(&gd,&gm,"C:\\TC\\BGI");
- printf("Enter end pt co-ordinates of line as x1 y1 x2 y2: ");
- scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
- dx=x2-x1;
- dy=y2-y1;
- if(abs(dx)>=abs(dy))
- step=abs(dx);
- else
- step=abs(dy);
- xinc=dx/step;
- yinc=dy/step;
- putpixel(x1,y1,WHITE);
- x=x1;
- y=y1;
- while(x!=x2||y!=y2)
- {
- x=x+xinc;
- y=y+yinc;
- putpixel(x,y,WHITE);
- }
- getch();
- closegraph();
- }
- //2d
- #include<stdio.h>
- #include<graphics.h>
- #include<conio.h>
- #include<math.h>
- int x[20],y[20],dx[20],dy[20],ch,n,i,sx,sy,tx,ty;
- float rad,angle;
- void draw()
- {
- for(i=0;i<n-1;i++)
- line(x[i],y[i],x[i+1],y[i+1]);
- line(x[i],y[i],x[0],y[0]);
- }
- void accept()
- {
- printf("Enter no. of vertices: \n");
- scanf("%d",&n);
- for(i=0;i<n;i++)
- {
- printf("Enter coordinates of vertice %d ",i+1);
- scanf("%d %d",&x[i],&y[i]);
- }
- cleardevice();
- draw();
- }
- void scaling()
- {
- printf("Enter scaling factor Sx and Sy: \n");
- scanf("%d %d",&sx,&sy);
- for(i=0;i<n;i++)
- {
- x[i]*=sx;
- y[i]*=sy;
- }
- cleardevice();
- draw();
- }
- void rotation()
- {
- printf("Enter rotation angle\n");
- scanf("%d",&angle);
- rad=3.14/angle*180;
- for(i=0;i<n;i++)
- {
- x[i]=dx[i];
- y[i]=dy[i];
- }
- for(i=1;i<n;i++)
- {
- x[i]=(int)(dx[i]*cos(rad)-dy[i]*sin(rad));
- y[i]=(int)(dx[i]*sin(rad)+dy[i]*cos(rad));
- }
- cleardevice();
- draw();
- }
- void translation()
- {
- printf("Enter Tx and Ty factor\n");
- scanf("%d %d",&tx,ty);
- for(i=0;i<n;i++)
- {
- x[i]+=tx;
- y[i]+=ty;
- }
- cleardevice();
- draw();
- }
- void main()
- {
- int gd,gm;
- detectgraph(&gd,&gm);
- initgraph(&gd,&gm,"C:\\TC\\BGI");
- while(1)
- {
- printf("Enter choice:\n1.Accept\n2.Scaling\n3.Rotation\n4.Translation\n5.Exit\n");
- scanf("%d",&ch);
- if(ch==5)
- break;
- switch(ch)
- {
- case 1: accept();
- break;
- case 2: scaling();
- break;
- case 3: rotation();
- break;
- case 4: translation();
- break;
- default:printf("Invalid input\n");
- break;
- }
- }
- }
- //bezier
- #include<stdio.h>
- #include<conio.h>
- #include<graphics.h>
- int i;
- float xxx[4][2],temp1,temp2;
- void line1(float xb,float yb)
- {
- line(xxx[0][0],xxx[0][1],xb,yb);
- xxx[0][0]=xb;
- xxx[0][1]=yb;
- }
- void bezier(float x2,float y2,float x3,float y3,float x4,float y4,int n)
- {
- float x12,y12,x23,y23,x34,y34;
- float x123,y123,x234,y234;
- float x1234,y1234;
- if(n==0)
- {
- line1(x2,y2);
- line1(x3,y3);
- line1(x4,y4);
- }
- else
- {
- x12=(xxx[0][0]+x2)/2;
- y12=(xxx[0][1]+y2)/2;
- x23=(x2+x3)/2;
- y23=(y2+y3)/2;
- x34=(x3+x4)/2;
- y34=(y3+y4)/2;
- x123=(x12+x23)/2;
- y123=(y12+y23)/2;
- x234=(x23+x34)/2;
- y234=(y23+y34)/2;
- x1234=(x123+x234)/2;
- y1234=(y123+y234)/2;
- n=n-1;
- bezier(x12,y12,x123,y123,x1234,y1234,n);
- bezier(x234,y234,x34,y34,x4,y4,n);
- }
- }
- void main()
- {
- int gd,gm;
- detectgraph(&gd,&gm);
- initgraph(&gd,&gm,"C:\\TC\\BGI");
- for(i=0;i<4;i++)
- {
- printf("Enter coordinates of point %d ",i+1);
- scanf("%f %f",&temp1,&temp2);
- xxx[i][0]=temp1;
- xxx[i][1]=temp2;
- }
- bezier(xxx[1][0],xxx[1][1],xxx[2][0],xxx[2][1],xxx[3][0],xxx[3][1],8);
- getch();
- closegraph();
- }
- //boundary fill
- #include<stdio.h>
- #include<conio.h>
- #include<graphics.h>
- void b_fill(int x,int y,int f_col,int b_col)
- {
- if(getpixel(x,y)!=f_col && getpixel(x,y)!=b_col)
- {
- putpixel(x,y,f_col);
- b_fill(x+1,y,f_col,b_col);
- b_fill(x-1,y,f_col,b_col);
- b_fill(x,y+1,f_col,b_col);
- b_fill(x,y-1,f_col,b_col);
- }
- }
- void main()
- {
- int gd,gm;
- int a[20][2],i,n,x,y;
- detectgraph(&gd,&gm);
- initgraph(&gd,&gm,"C:\\TC\\BGI");
- printf("Enter no. of edges: ");
- scanf("%d",&n);
- for(i=0;i<n;i++)
- {
- printf("\nEnter coordinates for edge %d ",i+1);
- scanf("%d %d",&a[i][0],&a[i][1]);
- }
- a[n][0]=a[0][0];
- a[n][1]=a[0][1];
- cleardevice();
- for(i=0;i<n;i++)
- line(a[i][0],a[i][1],a[i+1][0],a[i+1][1]);
- printf("\nEnter seed point: ");
- scanf("%d %d",&x,&y);
- b_fill(x,y,BLUE,15);
- getch();
- }
- //bresenham
- #include <stdio.h>
- #include <conio.h>
- #include <graphics.h>
- #include <math.h>
- void bresenham(int x1,int y1,int x2,int y2)
- {
- int xk,yk,e,s1,s2,dx,dy,xi,yi,i;
- xk=x1;
- yk=y1;
- dx=x2-x1;
- dy=y2-y1;
- putpixel(x1,y1,WHITE);
- if(dx==0 && dy==0)
- return;
- if(x2>x1)
- s1=1;
- else s1=-1;
- if(y2>y1)
- s2=1;
- else s2=-1;
- if(dx>dy)
- {
- e=2*dy-dx;
- for(i=0;i<=dx;i++)
- {
- if(e>0)
- {
- yk=yk+s2;
- e=e-2*dx;
- }
- xk=xk+s1;
- e=e+2*dy;
- putpixel(xk,yk,WHITE);
- }
- }
- else
- {
- e=2*dx-dy;
- for(i=0;i<=dy;i++)
- {
- if(e>=0)
- {
- xk=xk+s1;
- e=e-2*dy;
- }
- yk=yk+s2;
- e=e+2*dx;
- putpixel(xk,yk,WHITE);
- }
- }
- }
- void main()
- {
- int gd,gm,x1,y1,x2,y2;
- detectgraph(&gd,&gm);
- initgraph(&gd,&gm,"C:\\TC\\BGI");
- printf("Enter starting co-ordinates\n");
- scanf("%d %d",&x1,&y1);
- printf("Enter ending co-ordinates\n");
- scanf("%d %d",&x2,&y2);
- bresenham(x1,y1,x2,y2);
- getch();
- closegraph();
- }
- //midpoint circle
- #include<stdio.h>
- #include <conio.h>
- #include <math.h>
- #include <graphics.h>
- void display(int x1,int y1,int x,int y)
- {
- putpixel(x1+x,y1+y,WHITE);
- putpixel(x1+x,y1-y,WHITE);
- putpixel(x1-x,y1+y,WHITE);
- putpixel(x1-x,y1-y,WHITE);
- putpixel(x1+y,y1+x,WHITE);
- putpixel(x1+y,y1-x,WHITE);
- putpixel(x1-y,y1+x,WHITE);
- putpixel(x1-y,y1-x,WHITE);
- }
- void midpointcircle(int x1,int y1,int r)
- {
- int x,y;
- float p;
- x=0;
- y=r;
- p=1-r;
- while(x<=y)
- {
- if(p<=0)
- {
- x++;
- p=p+2*x+1;
- }
- else
- {
- x++;
- y--;
- p=p+2*(x-y)+1;
- }
- display(x1,y1,x,y);
- }
- }
- void main()
- {
- int x1,y1,r,gd,gm;
- gd=DETECT;
- initgraph(&gd,&gm,"C:\\TC\\BGI");
- printf("Enter center co-ordiantes\n");
- scanf("%d %d",&x1,&y1);
- printf("Enter radius\n");
- scanf("%d",&r);
- midpointcircle(x1,y1,r);
- getch();
- closegraph();
- }
- //dda
- #include <stdio.h>
- #include <conio.h>
- #include <graphics.h>
- #include <math.h>
- void dda(int x1,int y1,int x2,int y2)
- {
- int xk,yk,step,dx,dy,xi,yi,i;
- xk=x1;
- yk=y1;
- dx=x2-x1;
- dy=y2-y1;
- if(abs(dx)>=abs(dy))
- step=abs(dx);
- else step=abs(dy);
- xi=float(dx)/step;
- yi=float(dy)/step;
- for(i=0;i<=step;i++)
- {
- xk=xk+xi;
- yk=yk+yi;
- putpixel(int xk,int yk,WHITE);
- delay(2);
- }
- }
- void main()
- {
- int gd,gm,x1,y1,x2,y2;
- detectgraph(&gd,&gm);
- initgraph(&gd,&gm,"C:\\TC\\BGI");
- printf("Enter starting co-ordinates\n");
- scanf("%d %d",&x1,&y1);
- printf("Enter ending co-ordinates\n");
- scanf("%d %d",&x2,&y2);
- dda(x1,y1,x2,y2);
- getch();
- closegraph();
- }
- //floodfill
- #include<stdio.h>
- #include<conio.h>
- #include<graphics.h>
- void f_fill(int x,int y,int f_col)
- {
- if(getpixel(x,y)!=f_col)
- {
- putpixel(x,y,f_col);
- f_fill(x,y+1,f_col);
- f_fill(x,y-1,f_col);
- f_fill(x-1,y,f_col);
- f_fill(x+1,y,f_col);
- }
- }
- void main()
- {
- int gd,gm;
- int a[20][2],i,n,x,y;
- detectgraph(&gd,&gm);
- initgraph(&gd,&gm,"C:\\TC\\BGI");
- printf("Enter no. of edges: ");
- scanf("%d",&n);
- for(i=0;i<n;i++)
- {
- printf("\nEnter coordinates for edge %d ",i+1);
- scanf("%d %d",&a[i][0],&a[i][1]);
- }
- a[n][0]=a[0][0];
- a[n][1]=a[0][1];
- cleardevice();
- for(i=0;i<n;i++)
- line(a[i][0],a[i][1],a[i+1][0],a[i+1][1]);
- printf("\nEnter seed point: ");
- scanf("%d %d",&x,&y);
- f_fill(x,y,BLUE);
- getch();
- }
- //piechart
- #include<stdio.h>
- #include<conio.h>
- #include<graphics.h>
- #include<math.h>
- struct piechart
- {
- float x,y;
- }pts[2];
- int i,n,xc,yc;
- float r,data[5];
- void piechart(int xc,int yc,int r)
- {
- int x2=540,y2=240;
- float is,theta=0,total=0;
- circle(xc,yc,r);
- for(i=0;i<n;i++)
- total+=data[i];
- pts[0].x=xc;
- pts[0].y=yc;
- line(xc,yc,x2,480-y2);
- for(i=0;i<n-1;i++)
- {
- theta+=2*3.14*data[i]/total;
- pts[i].x=xc+r*cos(theta);
- pts[i].y=yc+r*sin(theta);
- x2=pts[i].x;
- y2=pts[i].y;
- setcolor(2);
- line(xc,480-yc,x2,480-y2);
- }
- }
- void main()
- {
- int gd,gm;
- detectgraph(&gd,&gm);
- initgraph(&gd,&gm,"C:\\TC\\BGI");
- printf("Enter no. of points\n");
- scanf("%d",&n);
- printf("Enter data\n");
- for(i=0;i<n;i++)
- scanf("%f",&data[i]);
- xc=640/2;
- yc=480/2;
- r=200;
- piechart(xc,yc,r);
- getch();
- }
- //scanline
- #include<stdio.h>
- #include<conio.h>
- #include<graphics.h>
- int isvertex(int x,int y,int a[20][2],int n)
- {
- int i;
- for(i=0;i<n;i++)
- if(a[i][0]==x)
- if(a[i][1]==y)
- return 1;
- return 0;
- }
- void main()
- {
- int gd,gm;
- int a[20][2],k,n,left=640,right=0,top=480,bottom=0,i,j;
- detectgraph(&gd,&gm);
- initgraph(&gd,&gm,"C:\\TC\\BGI");
- printf("Enter no. of vertices\n");
- scanf("%d",&n);
- for(i=0;i<n;i++)
- {
- printf("Enter co-ordinates for vertice %d ",i+1);
- scanf("%d %d",&a[i][0],&a[i][1]);
- if(a[i][0]<left)
- left=a[i][0];
- if(a[i][0]>right)
- right=a[i][0];
- if(a[i][1]<top)
- top=a[i][1];
- if(a[i][1]>bottom)
- bottom=a[i][1];
- }
- a[i][0]=a[0][0];
- a[i][1]=a[0][1];
- cleardevice();
- for(i=0;i<n;i++)
- line(a[i][0],a[i][1],a[i+1][0],a[i+1][1]);
- for(j=top;j<bottom;j++)
- {
- k=0;
- for(i=left;i<right;i++)
- {
- if(getpixel(i,j)==15 && getpixel(i+1,j)!=15)
- {
- if(isvertex(i,j,a,n)==1)
- k++;
- k++;
- }
- if(k%2==1)
- putpixel(i,j,15);
- }
- }
- getch();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement