c graphics programs file
TRANSCRIPT
SHRI ATMANAND JAIN INSTITUTE OF MANAGEMENT AND TECHNOLOGY
PRACTICAL FILE OF
PROGRAMMING IN C-GRAPHICS
SUBMITTED BYShubham Kanojia
MCA 4th SEMESTER
Roll No. 1511
HEAD OF DEPTT. SUBMITTED TO EXAMINER
Mrs. Rinkey Chaudhary Mrs. Rinkey Chaudhary
(HOD of, MCA) (HOD of, MCA)
INDEX
Sr.No
PARTICULARS SIGNATURE
1. Program to draw a line using polynomial method
2. Program to draw a line using DDA algorithm
3. Program to draw a line using Bresenham’s Algorithm
4. Program to draw circle using Polynomial method
5. Program to draw circle using Bresenham’s Algorithm
6. Program to draw a circle using trigonometric method
7. Program to draw a circle using mid-point method
8. Program to draw a ellipse using polynomial method
9. Program to draw a ellipse using Bresenham’s Algorithm
10. Program to draw a ellipse using trigonometric method
11. Program to draw a ellipse using mid-point method
12. Program to implement 2-D Translation
13. Program to implement 2-D Rotation
14. Program to implement 2-D Scaling
15. Program to draw sine curve
16. Program to draw X-Y axis
17. Program to print HELLO using line function
18. Program to print random lines on screen
19. Program to find whether a point is inside or outside the polygon
20. Program to implement mapping from window to viewport
21. Program to plot an ARC using trigonometric method
22. Program to implement 2-D reflection
23. Program to implement 2-D shearing
24. Program to implement line clipping using Cohan Sutherland algorithm
25. Program to implement line clipping using Liang Barsky method
26. Program of Boundary fill algorithm
27. Program of Flood fill algorithm
1. Program to draw a line using polynomial method :
#include<stdio.h>#include<conio.h>#include<graphics.h>#include<math.h>int main(){float m;int i,gd=DETECT,gm,x1,y1,x2,y2,x,y,dy,dx,b;printf("enter the x coordinates:");scanf("%d%d",&x1,&x2);printf("enter the y coordinates");scanf("%d%d",&y1,&y2);initgraph(&gd,&gm,"c:\\tc\\bgi");dx=x2-x1;dy=y2-y1;m=dy/dx;b=y1-(m*x1);x=x1;y=y1;if(m<1)while(x<=x2){putpixel(x, y+0.5,WHITE);x++;y=(m*x)+b;}else{while(y<=y2){putpixel(x+0.5,y,WHITE);y++;x=(y-b)/m;}
}getch();closegraph();}
Output :
2. Program to draw a line using DDA algorithm :
#include<stdio.h>#include<conio.h>#include<graphics.h>#include<math.h>int main(){float x,y,x1,y1,x2,y2,dx,dy,pixel;int i,gd=DETECT,gm;printf("enter the value of x1:");scanf("%f",&x1);printf("enter the value of y1:");scanf("%f",&y1);printf("enter the value of x2:");scanf("%f",&x2);printf("enter the value of y2:");scanf("%f",&y2);initgraph(&gd,&gm,"c:\\tc\\bgi");dx=abs(x2-x1);dy=abs(y2-y1);if(dx>=dy)pixel=dx;elsepixel=dy;dx=dx/pixel;dy=dy/pixel;x=x1;y=y1;i=1;while(i<=pixel){putpixel(x,y,WHITE);x=x+dx;y=y+dx;i=i+1;delay(100);}
getch();closegraph();}
Output:
3. Program to draw a line using Bresenham’s algorithm:
#include<stdio.h>#include<conio.h>#include<graphics.h>#include<math.h>int main(){float x,y,x1,y1,x2,y2,dx,dy;int i,gd=DETECT,gm,p,end;printf("enter the value of x1:");scanf("%f",&x1);printf("enter the value of y1:");scanf("%f",&y1);printf("enter the value of x2:");scanf("%f",&x2);printf("enter the value of y2:");scanf("%f",&y2);
initgraph(&gd,&gm,"c:\\tc\\bgi");dx=abs(x1-x2);dy=abs(y1-y2);p=2*dy-dx;if(x1>x2){x=x2;y=y2;end=x1;}else{x=x1;y=y1;end=x2;}putpixel(x,y,WHITE);while(x<end){x=x+1;if(p<0)
{p=p+2*dy;}else{y=y+1;p=p+2*(dy-dx);}putpixel(x,y,WHITE);}
getch();closegraph();}
Output :
4. Program to draw a circle using Polynomial method :
#include<stdio.h>#include<conio.h>#include<graphics.h>#include<math.h>int main(){int gd=DETECT,gm,xc,yc,xend,r,x,y;initgraph(&gd,&gm,"c:\\tc\\bgi");printf("***draw circle using polunomial method ***\n");printf("enter x centre and y centre\t");scanf("%d%d",&xc,&yc);printf("enter the radius \t");scanf("%d",&r);x=0;xend=r/sqrt(2);while(x<xend){y=sqrt(r*r-x*x);putpixel(xc+x,yc+y,WHITE);putpixel(xc+y,yc+x,WHITE);putpixel(xc-x,yc-y,WHITE);putpixel(xc-y,yc-x,WHITE);putpixel(xc+x,yc-y,WHITE);putpixel(xc+y,yc-x,WHITE);putpixel(xc-x,yc+y,WHITE);putpixel(xc-y,yc+x,WHITE);x++;}getch();closegraph();}
Output :
5. Program to draw a circle using Bresenham’s algorithm :
#include<stdio.h>#include<conio.h>#include<graphics.h>#include<math.h>int main(){int gd=DETECT,gm,xc,yc,r,x,y,pk;initgraph(&gd,&gm,"c:\\tc\\bgi");printf("*** Bresenham's circle drawing algorithm***");printf("enter the vlaue of xc \t");scanf("%d",&xc);printf("enter the vlaue of yc \t");scanf("%d",&yc);printf("enter the radius \t");scanf("%d",&r);x=0;y=r;putpixel(xc+x,yc-y,WHITE);pk=3-(2*r);for(x=0;x<=y;x++){if(pk<0){y=y;pk=(pk+(4*x)+6);}else{y=y-1;pk=pk+((4*(x-y)+10));}putpixel(xc+x,yc+y,WHITE);putpixel(xc+y,yc+x,WHITE);putpixel(xc-x,yc-y,WHITE);putpixel(xc-y,yc-x,WHITE);putpixel(xc+x,yc-y,WHITE);putpixel(xc+y,yc-x,WHITE);putpixel(xc-x,yc+y,WHITE);
putpixel(xc-y,yc+x,WHITE);delay(100);}getch();closegraph();}
Output :
6. Program to draw a circle using trigonometric method : #include<stdio.h>#include<graphics.h>#include<conio.h>#include<math.h>void put8pixel(int,int,int,int);void main(){int gd=DETECT,gm;int x,y,x1,y1,r,h,k,theta;float n=3.14159/180;printf("*Trignometric Method to draw a circle*\n");printf("\nenter the x and y coordinates:-");scanf("%d%d",&h,&k);printf("\nenter the radius:-\n");scanf("%d",&r);initgraph(&gd,&gm,"c:\\tc\\bgi");for(theta=0;theta<=45;theta++){x1=r*cos(theta*n);y1=r*sin(theta*n);x= x1+0.5;y=y1+0.5;put8pixel(x,y,h,k);}outtextxy(115,70,"circle using Trigonometric method");getch();closegraph();}void put8pixel(int x,int y,int h,int k){putpixel(x+h,y+k,WHITE);putpixel(x+h,-y+k,WHITE);putpixel(-x+h,y+k,WHITE);putpixel(-x+h,-y+k,WHITE);putpixel(y+h,x+k,WHITE);putpixel(y+h,-x+k,WHITE);putpixel(-y+h,x+k,WHITE);putpixel(-y+h,-x+k,WHITE);
}
Output :
7. Program to draw a circle using mid-point method :
#include<stdio.h>#include<conio.h>#include<graphics.h>void main(){int gd=DETECT, gm;int xc,yc,x,y,r,f;initgraph(&gd,&gm,"c:\\tc\\bgi");printf("Enter x-centre, y-centre and radius");scanf("%d%d%d",&xc,&yc,&r);x=0;y=r;f=1-r;while(x<=y){if(f<0){f=f+(3+2*x);x++;}else{f=f+(2*x-2*y+5);x++;y--;}putpixel(x+xc, y+yc, WHITE);putpixel(y+xc, x+yc,WHITE);putpixel(-x+xc, y+yc, WHITE);putpixel(-y+xc, x+yc, WHITE);putpixel(-x+xc, -y+yc, WHITE);putpixel(-y+xc, -x+yc, WHITE);putpixel(x+xc,-y+yc,WHITE);putpixel(y+xc,-x+yc,WHITE);}getch();closegraph();}
Output :
8. Program to draw a ellipse using polynomial method :
#include<stdio.h>#include<graphics.h>#include<conio.h>#include<math.h>void plot4pixels(int,int,int,int);void main(){int gd=DETECT,gm;int x,y,r,i,h,k,a,b;printf("\n*Polynomial method to draw an ellipse*\n");printf("\nenter the x and y coordinates:-\n");scanf("%d%d",&h,&k);printf("\nenter the first radius:-\n");scanf("%d",&a);printf("\nenter the second radius:-\n");scanf("%d",&b);x=0;y=b;
initgraph(&gd,&gm,"c:\\tc\\bgi");while(x<a){plot4pixels(x,y,h,k);x++;y=b*sqrt(((a*a)-(x*x*1.0))/(a*a));}plot4pixels(x,y,h,k);setcolor(WHITE);outtextxy(100,60,"ellipse using polynomial method");getch();}void plot4pixels(int x,int y,int h,int k){putpixel(x+h,y+k,WHITE);putpixel(x+h,-y+k,WHITE);putpixel(-x+h,y+k,WHITE);putpixel(-x+h,-y+k,WHITE);}
Output :
9. Program to draw a ellipse using bresenham’s algorithm :
#include<stdio.h>#include<conio.h>#include<graphics.h>#include<math.h>void bresenhamellipse(int,int,int,int);void ellipseplotpoints(int,int,int,int,int);
int main(){int gd=DETECT,gm;initgraph(&gd,&gm,"c:\\tc\\bgi");bresenhamellipse(300,300,30,40);getch();closegraph();}void bresenhamellipse(int xcenter,int ycenter,int rx,int ry){// xcenter and ycenter are the centre points.//rx and ry ,in these two any one can be the following,semi major axis and semi minor axis.long rx2=rx*rx,ry2=ry,x=0,y=ry,twory2=2*ry2,tworx2=2*rx2,p=0; ellipseplotpoints(xcenter,ycenter,x,y,WHITE); p=((int)(ry2*ry)+(.25*rx2)); while(twory2*x<tworx2*y) { x++; if(p<0) p+=(int)twory2*x+ry2; else { y--; p+=(int)twory2*ry2-ry2-tworx2*y; }
ellipseplotpoints(xcenter,ycenter,x,y,WHITE); } //for region 2 p=(int)(ry2*(x+.5)*(x+.5)*(x+.5)+rx2*(y-1)*(y-1)-rx2*ry2); while(y>0) { y--; if(p>0) p+=rx2-tworx2*y; else { x++; p+=rx2+twory2*x-tworx2*y; } ellipseplotpoints(xcenter,ycenter,x,y,WHITE); } } void ellipseplotpoints(int xcenter,int ycenter,int x,int y,int color) { putpixel(xcenter+x,ycenter+y,WHITE); putpixel(xcenter-x,ycenter+y,WHITE); putpixel(xcenter+x,ycenter-y,WHITE); putpixel(xcenter-x,ycenter-y,WHITE); }
Output :
10. Program to draw a ellipse using trigonometric method :
#include<stdio.h>#include<graphics.h>#include<conio.h>#include<math.h>void put4pixel(int,int,int,int);void main(){int x,y,x1,y1,a,b,h,k,theta;int gd=DETECT,gm;float p=3.14159/180;printf("*Trignometric method to draw an ellippse*\n");printf("\nenter the x and y coordinates:-\n");scanf("%d%d",&h,&k);printf("\nenter the first radius:-\n");scanf("%d",&a);printf("\nenter the second radius:-\n");scanf("%d",&b);
initgraph(&gd,&gm,"c:\\tc\\bgi");for(theta=0;theta<=90;theta++){x1=a*cos(theta*p);y1=b*sin(theta*p);x=x1+0.5;y=y1+0.5;put4pixel(x,y,h,k);}outtextxy(100,60,"ellipse using Trigonometric method");getch();closegraph();}void put4pixel(int x,int y,int h,int k){putpixel(x+h,y+k,WHITE);putpixel(x+h,-y+k,WHITE);putpixel(-x+h,y+k,WHITE);putpixel(-x+h,-y+k,WHITE);}
Output :
11. Program to draw a ellipse using mid-point method :
#include<stdio.h>#include<conio.h>#include<graphics.h>#include<math.h>void disp();float x,y;int xc,yc;void main(){int gd=DETECT,gm;int a,b;float p1,p2;clrscr();initgraph(&gd,&gm,"c:\\tc\\bgi");printf("enter the xc and yc,a and b radius");scanf("%d%d",&xc,&yc);scanf("%d%d",&a,&b);x=0;y=b;disp();p1=(b*b)-(a*a*b)+(a*a)/4;while((2.0*b*b*x)<=(2.0*a*a*y)){x++;if(p1<=0)p1=p1+(2.0*b*b*x)+(b*b);else{y--;p1=p1+(2.0*b*b*x)+(b*b)-(2.0*a*a*y);}disp();x=-x;disp();x=-x;}x=a;y=0;disp();
p2=(a*a)+2.0*(b*b*a)+(b*b)/4;while((2.0*b*b*x)>(2.0*a*a*y)){y++;if(p2>0)p2=p2+(a*a)-(2.0*a*a*y);else{x--;p2=p2+(2.0*b*b*x)-(2.0*a*a*y)+(a*a);}disp();y=-y;disp();y=-y;}getch();closegraph();}void disp(){putpixel(xc+x,yc+y,WHITE);putpixel(xc-x,yc+y,WHITE);putpixel(xc+x,yc-y,WHITE);putpixel(xc+x,yc-y,WHITE);}
Output :
12. Program to implement 2-D translation :
#include<graphics.h>#include<stdlib.h>#include<stdio.h>#include<math.h>void main(){int graphdriver=DETECT,graphmode,errorcode;int i;int x2,y2,x1,y1,x,y;printf("Enter the 2 line end points:");printf("x1,y1,x2,y2");scanf("%d%d%d%d",&x1,&y1,&x2,&y2);initgraph(&graphdriver,&graphmode,"c:\\tc\\bgi");line(x1,y1,x2,y2);printf("Enter translation co-ordinates ");printf("x,y");scanf("%d%d",&x,&y);x1=x1+x;y1=y1+y;x2=x2+x;y2=y2+y;printf("Line after translation");line(x1,y1,x2,y2);getch();closegraph();}
Output :
13. Program to implement 2-D rotation :
#include<graphics.h>#include<stdlib.h>#include<stdio.h>#include<math.h>void main(){int graphdriver=DETECT,graphmode,errorcode;int i;int x2,y2,x1,y1,x,y,xn,yn;double r11,r12,r21,r22,th;clrscr();printf("Enter the 2 line end points:");printf("x1,y1,x2,y2");scanf("%d%d%d%d",&x1,&y1,&x2,&y2);initgraph(&graphdriver,&graphmode,"c:\\tc\\bgi");line(x1,y1,x2,y2);printf("\n\n\n[ Enter the angle");scanf("%lf",&th);r11=cos((th*3.1428)/180);r12=sin((th*3.1428)/180);r21=(-sin((th*3.1428)/180));r22=cos((th*3.1428)/180);//printf("%lf %lf %lf %lf",r11,r12,r21,r22);xn=((x2*r11)-(y2*r12));yn=((x2*r12)+(y2*r11));line(x1,y1,xn,yn);getch();closegraph();}
Output :
14. Program to implement a 2-D scaling :
#include<graphics.h>#include<stdlib.h>#include<stdio.h>#include<math.h>void main(){int graphdriver=DETECT,graphmode,errorcode;int i;int x2,y2,x1,y1,x,y;printf("Enter the 2 line end points:");printf("x1,y1,x2,y2");scanf("%d%d%d%d",&x1,&y1,&x2,&y2);initgraph(&graphdriver,&graphmode,"c:\\tc\\bgi");line(x1,y1,x2,y2);printf("Enter scaling co-ordinates ");printf("x,y");scanf("%d%d",&x,&y);x1=(x1*x);y1=(y1*y);x2=(x2*x);y2=(y2*y);printf("Line after scaling");line(x1,y1,x2,y2);getch();closegraph();}
Output :
15. Program to draw sine curve :
#include <conio.h>#include <math.h>#include <graphics.h>#include <dos.h>
int main() {int gd = DETECT, gm;int angle = 0;double x, y;initgraph(&gd, &gm, "C:\\TC\\BGI");line(0, getmaxy() / 2, getmaxx(), getmaxy() / 2);/* generate a sine wave */for(x = 0; x < getmaxx(); x+=3) {/* calculate y value given x */y = 50*sin(angle*3.141/180);y = getmaxy()/2 - y;/* color a pixel at the given position */putpixel(x, y, 15);delay(100);/* increment angle */angle+=5;}getch();/* deallocate memory allocated for graphics screen */closegraph();return 0;}
Output :
16. Program to draw X-Y axis :
#include<stdio.h>#include<conio.h>#include<graphics.h>int main(){int gd=DETECT,gm;float xm,ym;initgraph(&gd,&gm,"c:\\tc\\bgi");//calculating the mid point of screenxm=getmaxx()/2;ym=getmaxy()/2;line(xm,0,xm,2*ym); //creating y axisline(0,ym,2*xm,ym); //creating x axisouttextxy(2*xm-60,ym+5,"X-axis");outtextxy(xm+4,10,"Y-axis");getch();closegraph();}
Output :
17. Program to print HELLO using line function :
#include<stdio.h>#include<conio.h>#include<graphics.h>void main(){int gd=DETECT,gm;int x,y,x1,y1;initgraph(&gd,&gm,"c:\\tc\\bgi");//hline(100,100,100,200);line(100,150,150,150);line(150,100,150,200);//eline(200,100,250,100);line(200,100,200,200);line(200,200,250,200);line(200,150,250,150);//lline(300,100,300,200);line(300,200,350,200);//lline(400,100,400,200);line(400,200,450,200);//oline(500,100,500,200);line(500,100,550,100);line(500,200,550,200);line(550,100,550,200);getch();closegraph();}
Output :
18. Program to print random lines on screen :
#include<stdio.h>#include<graphics.h>#include<conio.h>#include<stdlib.h>void main(){int gd=DETECT,gm;int i,j,xxmax,yymax,xmax,ymax,x,y,xx,yy;initgraph(&gd,&gm,"c:\\tc\\bgi");xmax=getmaxx();ymax=getmaxy();xxmax=getmaxx();yymax=getmaxy();while(!kbhit()){for(i=0;i<=100;i++){x=random(xmax);y=random(ymax);xx=random(xxmax);yy=random(yymax);for(j=1;j<=5;j++){setcolor(WHITE);line(x,y,xx,yy);}}}getch();closegraph();}resorecrtmode():}
Output :
19. Program to find whether a point is inside or outside the polygon :
#include<stdio.h>#include<stdlib.h>#include<conio.h>#include<graphics.h>#include<math.h>void main(){int gd=DETECT,gm,errorcode;float x[10],y[10],x1,y1,c[10],xm,ym;int flag,n,i,j;initgraph(&gd,&gm,"c:\\tc\\bgi");printf("enter the number of vertices of polygon");scanf("%d",&n);printf("\n enter the vertices\n");printf("x[i] and y[i]\n");for(i=0;i<n;i++){scanf("%f%f",&x[i],&y[i]);}printf("\n enter the point to be checked\n");scanf("%f%f",&x1,&y1);xm=getmaxx()/2;ym=getmaxx()/2;line(xm,0,xm,2*ym);line(0,ym,2*xm,ym);for(i=0;i<n-1;i++){circle(x[i]+xm,(-y[i]+ym),2);line(x[i]+xm,(-y[i]+ym),x[i+1]+xm,(-y[i+1]+ym));}circle(x[n-1]+xm,(-y[n-1]+ym),2);line(x[n-1]+xm,(-y[n-1]+ym),x[0]+xm,(-y[0]+ym));circle(x1+xm,-y1+ym,2);for(i=0;i<n;i++)c[i]=((x[i+1]-x[i])*(y1-y[i]))-((y[i+1]-y[i])*(x1-x[i]));c[n-1]=((x[0]-x[n-1])*(y1-y[n-1]))-((y[0]-y[n-1])*(x1-x[n-1]));flag=0;for(i=0;i<n;i++)
{if(c[i]>0)flag=1;if(c[i]<0){flag=0;break;}}if(flag==1)printf("\n point is inside the polygon");if(flag==0)printf("\n point outside the polygon");getch();}
Output :
20. Program to implement mapping from window to viewport :
#include<stdio.h>#include<conio.h>#include<graphics.h>#include<stdlib.h>void main(){float xwmin,xwmax,ywmax,ywmin;float xvmin,xvmax,yvmax,yvmin;float x[10],y[10],yv,xv,sx,sy;int gd=DETECT,gm,i;clrscr();printf("\n enter window port coordinates:\n(xwmin,ywmin,xwmax,ywmax): ");scanf("%f%f%f%f",&xwmin,&ywmin,&xwmax,&ywmax);printf("\n enter view port coordinates:\n(xvmin,yvmin,xvmax,yvmax): ");scanf("%f%f%f%f",&xvmin,&yvmin,&xvmax,&yvmax);printf("\n enter vertices for triangle: ");for(i=0;i < 3;i++){printf("\n enter(x%d,y%d):",i,i);scanf("%f%f",&x[i],&y[i]);}sx=((xvmax-xvmin)/(xwmax-xwmin));sy=((yvmax-yvmin)/(ywmax-xwmin));initgraph(&gd,&gm,"c:\\tc\\bgi");outtextxy(80,30,"window port");rectangle(xwmin,ywmin,xwmax,ywmax);for(i=0;i <2;i++){line(x[i],y[i],x[i+1],y[i+1]);}line(x[2],y[2],x[0],y[0]);getch();cleardevice();for(i=0;i <3;i++){x[i]=xvmin+((x[i]-xwmin)*sx);y[i]=yvmin+((y[i]-ywmin)*sy);}
outtextxy(150,10,"view port");rectangle(xvmin,yvmin,xvmax,yvmax);for(i=0;i <2;i++){line(x[i],y[i],x[i+1],y[i+1]);}line(x[2],y[2],x[0],y[0]);getch();}
Output :
21. Program to plot an ARC using trigonometric method :
#include<stdio.h>#include<conio.h>#include<math.h>#include<stdlib.h>#include<graphics.h>#define pi 3.14void main(){int gd=DETECT,gm,i,ch,errorcode;float a,b,h,k,x,y,theta,theta1;initgraph(&gd,&gm,"c:\\tc\\bgi");printf("\n enter the coordinates of arc center h and k");scanf("%f%f",&h,&k);printf("\n step size");scanf("%d",&i);printf("\n enter the length of major and minor axis");scanf("%f%f",&a,&b);printf("\n enter the starting and ending angle");scanf("%f%f",&theta,&theta1);errorcode=graphresult();//if(errorcode!=grOk)//{//printf("graphics error\n");//getch();//exit(1);//}while(theta<theta1){x=a*cos((pi*theta)/180)+h;y=b*sin((pi*theta)/180)+k;putpixel(x,y,WHITE);theta=theta+i;}getch();}
Output :
22. Program to implement 2-D Reflection :
#include<graphics.h>#include<math.h>#include<conio.h>#include<stdio.h>void main(){int gd=DETECT,gm;int i,xmid,ymid,x1,y1,x2,y2,x3,y3,x,y,dy,dx,p,gap=50,temp,option;int x1dash,x2dash,x3dash,y1dash,y2dash,y3dash;double theta;float m;char str[5];clrscr();initgraph(&gd,&gm,"..\\bgi");printf("Enter first co-ords of the triangle\n");scanf("%d %d",&x1,&y1);printf("Enter second co-ords of the triangle\n");scanf("%d %d",&x2,&y2);printf("Enter third co-ords of the triangle\n");scanf("%d %d",&x3,&y3);xmid= getmaxx()/2;ymid= getmaxy()/2;line(5,ymid,getmaxx()-5,ymid);line(xmid+3,5,xmid+3,getmaxy()-5);for( i= xmid+gap;i<getmaxx()-5;i=i+gap){outtextxy(i,ymid-3,"|");itoa(i-xmid,str,10);outtextxy(i,ymid+3,str);}for( i= ymid-gap;i>5;i=i-gap){outtextxy(xmid,i,"-");itoa(ymid-i,str,10);outtextxy(xmid+5,i,str);}for( i= xmid-gap;i>5;i=i-gap){
outtextxy(i,ymid-3,"|");itoa(-(xmid-i),str,10);outtextxy(i-6,ymid+3,str);}for( i= ymid+gap;i<getmaxy()-5;i=i+gap){outtextxy(xmid,i,"-");itoa(-(i-ymid),str,10);outtextxy(xmid+8,i,str);}line(x1+xmid,ymid-y1,x2+xmid,ymid-y2);line(x2+xmid,ymid-y2,x3+xmid,ymid-y3);line(x3+xmid,ymid-y3,x1+xmid,ymid-y1);setcolor(255);printf("Reflection about \n");printf("X axis : 1\n");printf("Y axis : 2\n");printf("X=Y axis : 3\n");printf(" Enter the option (1-3):");scanf("%d",&option);switch( option){case 1: y1=-y1; y2=-y2;y3=-y3; break;case 2: x1=-x1;x2=-x2;x3=-x3;break;case 3: y1=-y1; y2=-y2;y3=-y3; theta= ((double) 90 *3.14f )/(double)180; x1dash=x1*cos(theta)-y1*sin(theta); x2dash=x2*cos(theta)-y2*sin(theta); x3dash=x3*cos(theta)-y3*sin(theta); y1dash=x1*sin(theta)+y1*cos(theta); y2dash=x2*sin(theta)+y2*cos(theta); y3dash=x3*sin(theta)+y3*cos(theta); x1=x1dash;x2=x2dash;x3=x3dash; y1=y1dash;y2=y2dash;y3=y3dash;}line(x1+xmid,ymid-y1,x2+xmid,ymid-y2);line(x2+xmid,ymid-y2,x3+xmid,ymid-y3);line(x3+xmid,ymid-y3,x1+xmid,ymid-y1);getch();closegraph();}
Output :
23. Program to implement 2-D Shearing :
#include<graphics.h>#include<conio.h>void main(){int gd=DETECT,gm,option,xref,yref;int i,maxx,maxy,x1,y1,x2,y2,x3,y3,x4,y4,gap=50;float shx=0.0,shy=0.0;char str[5];clrscr();initgraph(&gd,&gm,"..\\bgi");printf("enter the endpoints of the top of the rectangle (x1,y1) & (x2,y2):"); scanf("%d%d%d%d",&x1,&y1,&x2,&y2); printf("enter the endpoints of bottom of the rectangle (x3,y3) & (x4,y4)"); scanf("%d%d%d%d",&x3,&y3,&x4,&y4); printf(" Enter the axis to shear\n"); printf(" 1 - X axis Shear\n"); printf(" 2 - Y axis shear\n"); scanf("%d",&option ); if(option==1) { printf("enter the value for x-axis shear( can be fraction too):"); scanf("%f",&shx); } else { printf("enter the value for y-axis shear( can be fraction too):"); scanf("%f",­); }clearviewport();maxx= getmaxx();maxy=getmaxy();line(3,maxy-1,maxx-5,maxy-1);line(5,5,5,maxy-3);for( i= 0;i<maxx-5;i=i+gap) // code to display co-ordinates{outtextxy(i+3,maxy-7,"|");itoa(i,str,10);outtextxy(i,maxy-10,str);}
for( i= maxy;i>0;i=i-gap){outtextxy(3,i,"-");itoa(maxy-i,str,10);outtextxy(9,i,str);} setcolor(WHITE); // drawing rectangle using endpoints line(x1,maxy-y1,x2,maxy-y2); line(x3,maxy-y3,x4,maxy-y4); line(x1,maxy-y1,x3,maxy-y3); line(x2,maxy-y2,x4,maxy-y4); outtextxy(10,10,"hit any key to see the shearing effect" ); getch(); setcolor(WHITE); // to hide the rectangle drawn line(x1,maxy-y1,x2,maxy-y2); line(x3,maxy-y3,x4,maxy-y4); line(x1,maxy-y1,x3,maxy-y3); line(x2,maxy-y2,x4,maxy-y4); setcolor(WHITE); // to redraw the rectangle if(option==1) { // shearing about x axis so only points x1 and x2 need to be recomputed line(x1+shx*y1,maxy-y1,x2+shx*y2,maxy-y2); line(x3,maxy-y3,x4,maxy-y4); line(x1+shx*y1,maxy-y1,x3,maxy-y3); line(x2+shx*y2,maxy-y2,x4,maxy-y4); } else { // shearing about y axis so only points y2 and y4 need to be recomputed line(x1,maxy-y1,x2,maxy-(y2+shy*x2)); line(x3,maxy-y3,x4,maxy-(y4+shy*x4)); line(x1,maxy-y1,x3,maxy-y3); line(x2,maxy-(y2+shy*x2),x4,maxy-(y4+shy*x4));
} getch(); closegraph();}
Output :
24. Program to implement line clipping using Cohan Sutherland algorithm :
#include<stdio.h>#include<conio.h>#include<graphics.h>void main(){int gd=DETECT, gm;float i,xmax,ymax,xmin,ymin,x1,y1,x2,y2,m;float start[4],end[4],code[4];clrscr();initgraph(&gd,&gm,"c:\\tc\\bgi");printf("\n\tEnter the bottom-left coordinate of viewport: ");scanf("%f %f",&xmin,&ymin);printf("\n\tEnter the top-right coordinate of viewport: ");scanf("%f %f",&xmax,&ymax);printf("\nEnter the coordinates for starting point of line: ");scanf("%f %f",&x1,&y1);printf("\nEnter the coordinates for ending point of line: ");scanf("%f %f",&x2,&y2);for(i=0;i <4;i++){start[i]=0;end[i]=0;}m=(y2-y1)/(x2-x1);if(x1 <xmin) start[0]=1;if(x1 >xmax) start[1]=1;if(y1 >ymax) start[2]=1;if(y1 <ymin) start[3]=1;if(x2 <xmin) end[0]=1;if(x2 >xmax) end[1]=1;if(y2 >ymax) end[2]=1;if(y2 <ymin) end[3]=1;for(i=0;i <4;i++)code[i]=start[i]&&end[i];if((code[0]==0)&&(code[1]==0)&&(code[2]==0)&&(code[3]==0)){
if((start[0]==0)&&(start[1]==0)&&(start[2]==0)&&(start[3]==0)&&(end[0]==0)&&(end[1]==0)&&(end[2]==0)&&(end[3]==0)){cleardevice();printf("\n\t\tThe line is totally visible\n\t\tand not a clipping candidate");rectangle(xmin,ymin,xmax,ymax);line(x1,y1,x2,y2);getch();}else{cleardevice();printf("\n\t\tLine is partially visible");rectangle(xmin,ymin,xmax,ymax);line(x1,y1,x2,y2);getch();if((start[2]==0)&&(start[3]==1)){ x1=x1+(ymin-y1)/m; y1=ymin;}if((end[2]==0)&&(end[3]==1)){ x2=x2+(ymin-y2)/m; y2=ymin;}if((start[2]==1)&&(start[3]==0)){ x1=x1+(ymax-y1)/m; y1=ymax;}if((end[2]==1)&&(end[3]==0)){ x2=x2+(ymax-y2)/m; y2=ymax;}if((start[1]==0)&&(start[0]==1)){ y1=y1+m*(xmin-x1); x1=xmin;}
if((end[1]==0)&&(end[0]==1)){ y2=y2+m*(xmin-x2); x2=xmin;}if((start[1]==1)&&(start[0]==0)){ y1=y1+m*(xmax-x1); x1=xmax;}if((end[1]==1)&&(end[0]==0)){ y2=y2+m*(xmax-x2); x2=xmax;}clrscr();cleardevice();printf("\n\t\tAfter clippling:");rectangle(xmin,ymin,xmax,ymax);line(x1,y1,x2,y2);getch();}}else{clrscr();cleardevice();printf("\nLine is invisible");rectangle(xmin,ymin,xmax,ymax);}getch();closegraph();}
Output :
25. Program to implement line clipping using Liang Barsky method :
#include<graphics.h>#include<dos.h>#include<conio.h>#include<stdlib.h>void main(){int gd, gm ;int x1 , y1 , x2 , y2 ;int wxmin,wymin,wxmax, wymax ;float u1 = 0.0,u2 = 1.0 ;int p1 , q1 , p2 , q2 , p3 , q3 , p4 ,q4 ;float r1 , r2 , r3 , r4 ;int x11 , y11 , x22 , y22 ;clrscr();printf("Enter the windows left xmin , top boundry ymin\n");scanf("%d%d",&wxmin,&wymin);printf("Enter the windows right xmax ,bottom boundry ymax\n");scanf("%d%d",&wxmax,&wymax);printf("Enter line x1 , y1 co-ordinate\n");scanf("%d%d",&x1,&y1);printf("Enter line x2 , y2 co-ordinate\n");scanf("%d%d",&x2,&y2);printf("liang barsky express these 4 inequalities using lpk<=qpk\n");p1 = -(x2 - x1 ); q1 = x1 - wxmin ;p2 = ( x2 - x1 ) ; q2 = wxmax - x1 ;p3 = - ( y2 - y1 ) ; q3 = y1 - wymin ;p4 = ( y2 - y1 ) ; q4 = wymax - y1 ;printf("p1=0 line is parallel to left clipping\n");printf("p2=0 line is parallel to right clipping\n");printf("p3=0 line is parallel to bottom clipping\n");printf("p4=0 line is parallel to top clipping\n");if( ( ( p1 == 0.0 ) && ( q1 < 0.0 ) ) ||( ( p2 == 0.0 ) && ( q2 < 0.0 ) ) ||( ( p3 == 0.0 ) && ( q3 < 0.0 ) ) ||( ( p4 == 0.0 ) && ( q4 < 0.0 ) ) ){printf("Line is rejected\n");getch();
detectgraph(&gd,&gm);initgraph(&gd,&gm,"c:\\tc\\bgi");setcolor(WHITE);rectangle(wxmin,wymax,wxmax,wymin);setcolor(WHITE);line(x1,y1,x2,y2);getch();setcolor(WHITE);line(x1,y1,x2,y2);getch();}else{if( p1 != 0.0 ){r1 =(float) q1 /p1 ;if( p1 < 0 )u1 = max(r1 , u1 );elseu2 = min(r1 , u2 );}if( p2 != 0.0 ){r2 = (float ) q2 /p2 ;if( p2 < 0 )u1 = max(r2 , u1 );elseu2 = min(r2 , u2 );
}if( p3 != 0.0 ){r3 = (float )q3 /p3 ;if( p3 < 0 )u1 = max(r3 , u1 );elseu2 = min(r3 , u2 );}if( p4 != 0.0 ){r4 = (float )q4 /p4 ;
if( p4 < 0 )u1 = max(r4 , u1 );elseu2 = min(r4 , u2 );}if( u1 > u2 )printf("line rejected\n");else{x11 = x1 + u1 * ( x2 - x1 ) ;y11 = y1 + u1 * ( y2 - y1 ) ;x22 = x1 + u2 * ( x2 - x1 );y22 = y1 + u2 * ( y2 - y1 );printf("Original line cordinates\n");printf("x1 = %d , y1 = %d, x2 = %d, y2 = %d\n",x1,y1,x2,y2);printf("Windows coordinate are \n");printf("wxmin = %d, wymin = %d,wxmax = %d , wymax = %d ",wxmin,wymin,wxmax,wymax);printf("New coordinates are \n");printf("x1 = %d, y1 = %d,x2 = %d , y2 = %d\n",x11,y11,x22,y22);detectgraph(&gd,&gm);initgraph(&gd,&gm,"C:\\TC\\BGI");setcolor(WHITE);rectangle(wxmin,wymax,wxmax,wymin);setcolor(WHITE);line(x1,y1,x2,y2);getch();setcolor(BLACK);line(x1,y1,x2,y2);setcolor(WHITE);line(x11,y11,x22,y22);getch();}}}
Output :
26. Program of Boundary fill algorithm :
#include<stdio.h>#include<conio.h>#include<graphics.h>#include<dos.h>void fill_right(int x,int y);void fill_left(int x,int y);void main(){int gd=DETECT,gm,x,y,n,i;clrscr();initgraph(&gd,&gm,"c:\\tc\\bgi");printf("*** Boundary Fill algorithm ***");/*- draw object -*/line (50,50,200,50);line (200,50,200,300);line (200,300,50,300);line (50,300,50,50);/*- set seed point -*/x=100; y=100;fill_right(x,y);fill_left(x-1,y);getch();}void fill_right(int x,int y){if((getpixel(x,y) != WHITE)&&(getpixel(x,y) != RED)){putpixel(x,y,RED);fill_right(++x,y); x=x-1;fill_right(x,y-1);fill_right(x,y+1);}delay(1);}void fill_left(int x,int y){if((getpixel(x,y) != WHITE)&&(getpixel(x,y) != RED))
{putpixel(x,y,RED);fill_left(--x,y); x=x+1;fill_left(x,y-1);fill_left(x,y+1);}delay(1);}
Output :
27. Program of Flood fill algorithm :
#include<stdio.h>#include<conio.h>#include<graphics.h>#include<dos.h>void flood(int,int,int,int);void main(){int gd,gm=DETECT;clrscr();detectgraph(&gd,&gm);initgraph(&gd,&gm,"c:\\tc\\bgi");rectangle(50,50,100,100);flood(55,55,12,0);getch();}void flood(int x,int y, int fill_col, int old_col){if(getpixel(x,y)==old_col){delay(10);putpixel(x,y,fill_col);flood(x+1,y,fill_col,old_col);flood(x-1,y,fill_col,old_col);flood(x,y+1,fill_col,old_col);flood(x,y-1,fill_col,old_col);}}
Output :