Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Computer Graphics Lab File C Programs

C Programs Of Computer Graphics.
In these 13 programs with Output is given.

  • Login to see the comments

Computer Graphics Lab File C Programs

  1. 1. 1 Program 1 WRITE A C PROGRAM TO DRAW LINE BY USING DDA AND BRESENHAM'S ALGORITHM. # include<stdio.h> # include<conio.h> # include<graphics.h> # include<math.h> void dda(float x1,float y1,float x2,float y2) { float dx,dy,x=x1,y=y1,m; int i; dx=x2-x1; dy=y2-y1; if(abs(dx)>=abs(dy)) m=abs(dx); else m=abs(dy); putpixel((int)x,(int)y,15); for(i=1;i<=m;i++) { x=x+dx/m; y=y+dy/m; putpixel((int)x,(int)y,15); } } void bress(float x1,float y1,float x2,float y2) { int x,y,end,inc=0,p,dx=abs(x2-x1); int dy=abs(y2-y1),c=0,current=0; if(dx>dy) { p=2*dy-dx; if(x1<x2) { x=x1; y=y1; end=x2; if(y1<y2) inc=1;
  2. 2. 2 if(y1>y2) inc=-1; } else { x=x2; y=y2; end=x1; if(y2<y1) inc=1; if(y2<y1) inc=-1; } while(x<=end) { putpixel(x,y,15); if(p<0) p=p+2*dy; else { y=y+inc; p=p+2*(dy-dx); } x++; if(current==0 && c==10) { current=1; c=-1; } if(current==1 && c==6) { current=0; c=-1; } c++; } } } void main() { float x1,x2,y1,y2; int ch; int gd=DETECT,gm=DETECT;
  3. 3. 3 initgraph(&gd,&gm," "); printf("ENTER THE END POINTS OF LINE (x1,y1,x2,y2): "); scanf("%f%f%f%f",&x1,&y1,&x2,&y2); printf("CHOOSE ALGORITHM: "); printf("n 1-DDA"); printf("n 2-BRESENHAM"); printf("n YOUR CHOICE IS: "); scanf("%d",&ch); if(ch==1) dda(x1,y1,x2,y2); if(ch==2) bress(x1,y1,x2,y2); getch(); closegraph(); }
  4. 4. 4 OUTPUT-1
  5. 5. 5 Program 2 WRITE A C PROGRAM TO DRAW MIDPOINT CIRCLE ALGORITHM. # include<stdio.h> # include<graphics.h> # include<conio.h> # include<math.h> void bresenham_circle(const int h,const int k,const int r) { int x=0,y=r,p=(3-(2*r)); // cleardevice(); line(320,1,320,480); line(1,240,640,240); do { delay(15); putpixel((h+x),(k+y),25); putpixel((h+y),(k+x),15); putpixel((h+y),(k-x),25); putpixel((h+x),(k-y),15); putpixel((h-x),(k-y),25); putpixel((h-y),(k-x),15); putpixel((h-y),(k+x),25); putpixel((h-x),(k+y),15); x++; if(p<0) p+=((4*x)+6); else { y--; p+=((4*(x-y))+10); } } while(x<=y); } void main(void) { int driver=VGA,mode=VGAHI,h,k,r;
  6. 6. 6 initgraph(& driver,& mode,"c:tcbgi"); printf("n ENTER THE VALUE OF [H-COORDINATE]: "); scanf("%d",&h); printf("n ENTER THE VALUE OF [K-COORDINATE]: "); scanf("%d",&k); printf("n ENTER THE VALUE OF THE RADIUS: "); scanf("%d",&r); bresenham_circle(320+h,240-k,r); do { r--; bresenham_circle(320+h,240-k,r); }while(r!=0); getche(); }
  7. 7. 7 OUTPUT-2
  8. 8. 8 Program 3 WRITE A C PROGRAM OF WINDOW TO VIEW PORT. # include<conio.h> # include<stdio.h> # include<graphics.h> void image(); float wxmin,wymin,wxmax,wymax; float vxmin,vymin,vxmax,vymax; void main() { int gd,gm; detectgraph(&gd,&gm); initgraph(&gd,&gm,"c:tc"); printf("nt ENTER THE COORDINATES OF WINDOW: n"); printf("nt wxmin,wymin: "); scanf("%f%f",&wxmax,&wymax); printf("nt ENTER THE COORDINATES OF VIEW: n"); printf("nt vxmin,vymin: "); scanf("%f%f",&vxmin,&vymin); printf("nt vxmax,vymax: "); scanf("%f%f",&vxmax,&vymax); rectangle(wxmin,wymin,wxmax,wymax); rectangle(vxmin,vymin,vxmax,vymax); getch(); cleardevice(); image(); getch(); } void image() { float x1,y1,x2,y2,vx1,vx2,vy1,vy2; clrscr(); printf("nnt ENTER THE COORDINATES OF LINE: "); printf("nnt X1 Y1: "); scanf("%f%f",&x1,&y1); printf("nnt X2 Y2: "); scanf("%f%f",&x2,&y2);
  9. 9. 9 rectangle(wxmin,wymin,wxmax,wymax); rectangle(vxmin,vymin,vxmax,vymax); line(x1,y1,x2,y2); vx1=((vxmax-vxmin)/(wxmax-wxmin))*(x1-wxmin)+vxmin; vy1=((vxmax-vxmin)/(wxmax-wxmin))*(y1-wxmin)+vxmin; vx2=((vxmax-vxmin)/(wxmax-wxmin))*(x2-wxmin)+vxmin; vy2=((vxmax-vxmin)/(wxmax-wxmin))*(y2-wxmin)+vxmin; line(vx1,vy1,vx2,vy2); }
  10. 10. 10 OUTPUT-3
  11. 11. 11 Program 4 WRITE A C PROGRAM OF COHEN-SUTHERLAND ALGORITHM. #include<stdio.h> #include<graphics.h> typedef unsigned int outcode; enum { TOP=0x1, BOTTOM=0x2, RIGHT=0x4, LEFT=0x8 }; void lineclip(x0,y0,x1,y1,xwmin,ywmin,xwmax,ywmax ) float x0,y0,x1,y1,xwmin,ywmin,xwmax,ywmax; { int gd,gm; outcode code0,code1,codeout; int accept = 0, done=0; code0 = calcode(x0,y0,xwmin,ywmin,xwmax,ywmax); code1 = calcode(x1,y1,xwmin,ywmin,xwmax,ywmax); do{ if(!(code0 | code1)) { accept =1 ; done =1; } else if(code0 & code1) done = 1; else { float x,y; codeout = code0 ? code0 : code1; if(codeout & TOP) { x = x0 + (x1-x0)*(ywmax-y0)/(y1-y0); y = ywmax; } else if( codeout & BOTTOM) { x = x0 + (x1-x0)*(ywmin-y0)/(y1-y0); y = ywmin; } else
  12. 12. 12 if ( codeout & RIGHT) { y = y0+(y1-y0)*(xwmax-x0)/(x1-x0); x = xwmax; } else { y = y0 + (y1-y0)*(xwmin-x0)/(x1-x0); x = xwmin; } if( codeout == code0) { x0 = x; y0 = y; code0=calcode(x0,y0,xwmin,ywmin,xwmax,ywmax); } else { x1 = x; y1 = y; code1 = calcode(x1,y1,xwmin,ywmin,xwmax,ywmax); } } } while( done == 0); if(accept) line(x0,y0,x1,y1); rectangle(xwmin,ywmin,xwmax,ywmax); getch(); } /*--------------------------------------------------------------------*/ int calcode (x,y,xwmin,ywmin,xwmax,ywmax) float x,y,xwmin,ywmin,xwmax,ywmax; { int code =0; if(y> ywmax) code |=TOP; else if( y<ywmin) code |= BOTTOM; else if(x > xwmax) code |= RIGHT; else if ( x< xwmin)
  13. 13. 13 code |= LEFT; return(code); } /*-------------------------------------------------*/ void main() { float x2,y2,x1,y1,xwmin,ywmin,xwmax,ywmax; int gd,gm; detectgraph(&gd,&gm); initgraph(&gd,&gm,"C:TCBGI"); printf("nntEnter the co-ordinates of Line :"); printf("nntX1 Y1 : "); scanf("%f %f",&x1,&y1); printf("nntX2 Y2 : "); scanf("%f %f",&x2,&y2); printf("ntEnter the co_ordinates of window :n "); printf("ntxwmin , ywmin : "); scanf("%f %f",&xwmin,&ywmin); printf("ntxwmax , ywmax : "); scanf("%f %f",&xwmax,&ywmax); line(x1,y1,x2,y2); rectangle(xwmin,ywmin,xwmax,ywmax); getch(); cleardevice(); lineclip(x1,y1,x2,y2,xwmin,ywmin,xwmax,ywmax ); getch(); closegraph(); }
  14. 14. 14 OUTPUT-4
  15. 15. 15 Program 5 WRITE A C PROGRAM TO DRAW A BEZIER – CURVE. #include<stdio.h> #include<graphics.h> #include<stdlib.h> #include<string.h> #include<conio.h> #include<math.h> int *x,*y; void bezier(int *x1,int *y1) { int xa,ya,za; float u=0; moveto(*x1,*y1); while (u<=1) { xa=(*(x1+3)*pow(u,3))+(3*(*(x1+2))*pow(u,2)*(1-u))+ (3*(*(x1+1))*u*pow(1-u,2))+(*x1*pow(1-u,3)); ya=(*(y1+3)*pow(u,3))+(3*(*(y1+2))*pow(u,2)*(1-u))+ (3*(*(y1+1))*u*pow(1-u,2))+(*y1*pow(1-u,3)); lineto(xa, ya); u += 0.01; } } void main(void) { int gd=DETECT, gm, key, xpos, ypos, i = 0; char xp[4], yp[4]; x = (int *)malloc(sizeof(int) * 4); y = (int *)malloc(sizeof(int) * 4); //registerbgidriver(EGAVGA_driver); initgraph(&gd, &gm, "c:tcbgi"); outtextxy(10, 460, "Press Esc to exit."); outtextxy(400, 460, "Present position : "); moveto(getmaxx() / 2, getmaxy() / 2); do {
  16. 16. 16 xpos = getx(); ypos = gety(); itoa(xpos, xp, 10); itoa(ypos,yp,10); setviewport(550,460,639,479,1); clearviewport(); outtextxy(0,0,xp); outtextxy(40,0,yp); setviewport(0,0,639,479,1); moveto(xpos,ypos); key=getch(); if (key==0) key=getch(); switch(key) { case 72 : ypos--; //up arrow moveto(xpos,ypos); break; case 80 : ypos++; //down arrow moveto(xpos,ypos); break; case 75 : xpos--; //left arrow moveto(xpos,ypos); break; case 77 : xpos++; //right arrow moveto(xpos,ypos); break; case 87 : case 119 : ypos-=50; moveto(xpos,ypos); break; case 65 : case 97 : xpos-=50; moveto(xpos,ypos); break; case 83 : case 115 :xpos+=50; moveto(xpos,ypos); break; case 90 : case 122 :ypos+=50; moveto(xpos,ypos); break; case 13 : putpixel(xpos,ypos,15); *(x+i)=xpos;
  17. 17. 17 *(y+i)=ypos; i++; break; } if (i==4) { bezier(x,y); i=0; } } while(key!=27); closegraph(); getch(); }
  18. 18. 18 Output-5
  19. 19. 19 Program 6 WRITE A C PROGRAM TO SHEAR A CUBOID. #include<stdio.h> #include<conio.h> #include<math.h> #include<graphics.h> void bress(float x1,float y1, float x2,float y2) { int x,y,end,inc=0,p,dx=abs(x2-x1),dy=abs(y2-y1),c=0,current=0; if ( dx > dy ) { p=2*dy-dx; if(x1<x2) { x=x1; y=y1; end=x2; if(y1<y2) inc=1; if(y1>y2) inc=-1; } else { x=x2; y=y2; end=x1; if(y2<y1) inc=1; if(y2>y1) inc=-1; } while(x<=end) { putpixel(x,y,15); if(p<0) p=p+2*dy; else {
  20. 20. 20 y=y+inc; p=p+2*(dy-dx); } x++; if(current==0 && c==10) { current=1; c=-1; } if(current==1 && c==6) { current=0; c=-1; } c++; } } else { p=2*dx-dy; if(y1<y2) { x=x1; y=y1; end=y2; if(x1<x2) inc=1; if(x1>x2) inc=-1; } else { x=x2; y=y2; end=y1; if(x2<x1) inc=1; if(x2>x1) inc=-1; } while(y<=end) { putpixel(x,y,15); if(p<0)
  21. 21. 21 p=p+2*dx; else { x=x+inc; p=p+2*(dx-dy); } y++; if(current==0 && c==10) { current=1; c=-1; } if(current==1 && c==6) { current=0; c=-1; } c++; } } } void main() { float x1,x2,a,b,c,d,y1,y2; double ch; int t=30; int gd=DETECT,gm=DETECT; initgraph(&gd,&gm,"c:tcbgi"); printf("Enter the end pts of the line(x,y)"); scanf("%f%f%f%f",&x1,&y1,&x2,&y2); bress(x1,y1,x2,y1); bress(x2,y1,x2,y2); bress(x1,y2,x2,y2); bress(x1,y2,x1,y1); bress(x1+t,y1+t,x2+t,y1+t); bress(x2+t,y1+t,x2+t,y2+t); bress(x1+t,y2+t,x2+t,y2+t); bress(x1+t,y2+t,x1+t,y1+t); bress(x1,y1,x1+t,y1+t); bress(x2,y1,x2+t,y1+t);
  22. 22. 22 bress(x1,y2,x1+t,y2+t); bress(x2,y2,x2+t,y2+t); /* a=x1+(10*y1); b=x2+(10*y1); c=(10*x1)+y1; d=(10*x2)+y1;*/ bress(x1+50,y1+40,x2+50,y1+40); bress(x1+t,y2+t,x1+50,y1+40); bress(x2+t,y2+t,x2+50,y1+40); bress(x1+50,y1+40,x1,y1); bress(x2+50,y1+40,x2,y1); getch(); closegraph(); }
  23. 23. 23 OUTPUT-6
  24. 24. 24 Program 7 WRITE A C PROGRAM TO DRAW A POLYGON AND PERFORM THE FOLLOWING OPERATIONS:- ROTATION TRANSLATION SCALING. #include<stdio.h> #include<graphics.h> #include<stdlib.h> #include<conio.h> #include<math.h> int *x,*y,i,nin; float x1,y1,theta; void drawpolygon(int *x,int *y) { int gd=DETECT,gm,ch=0,x1,y1,theta; //registerbgidriver(EGAVGA_driver); initgraph(&gd,&gm,""); for (i=0;i<(nin-1);i++) line(*(x+i),*(y+i),*(x+i+1),*(y+i+1)); line(*(x+nin-1),*(y+nin-1),*x,*y); getch(); closegraph(); } void translate(float x1,float y1) { for (i=0;i<nin;i++) { *(x+i)+=x1; *(y+i)+=y1; } } void scale(float x1,float y1) { int a,b; a=*x;
  25. 25. 25 b=*y; translate(-a,-b); for (i=0;i<nin;i++) { *(x+i)*=x1; *(y+i)*=y1; } translate(a,b); } void rotate(float theta) { int a,b,c,d; c=*x; d=*y; translate(-c,-d); for (i=0;i<nin;i++) { a=(*(x+i)*cos(theta))-(*(y+i)*sin(theta)); b=(*(x+i)*sin(theta))+(*(y+i)*cos(theta)); *(x+i)=a; *(y+i)=b; } translate(c,d); } void main(void) { int ch; x=(int *)malloc(sizeof(int)*10); y=(int *)malloc(sizeof(int)*10); clrscr(); printf("ENTER NUMBER OF SIDES IN POLYGON : "); scanf("%d",&nin); printf("ENTER THE COORDINATES OF THE VERTICES (x,y) :n"); for (i=0;i<nin;i++) { printf("(i+1) : "); scanf("%d%d",&(*(x+i)),&(*(y+i))); } drawpolygon(x,y); while (ch!=4) { printf("YOUR OPTIONS :n");
  26. 26. 26 printf("1)TRANSLATEn"); printf("2)SCALEn"); printf("3)ROTATEn"); printf("4)EXITn"); printf("nYOUR CHOICE : "); scanf("%d",&ch); clrscr(); switch(ch) { case 1:printf("TRANSLATION IN X-DIRECTION : "); scanf("%d",&x1); printf("TRANSLATION IN Y-DIRECTION : "); scanf("%d",&y1); translate(x1,y1); drawpolygon(x,y); break; case 2:printf("SCALING IN X-DIRECTION : "); scanf("%f",&x1); printf("SCALING IN Y-DIRECTION : "); scanf("%f",&y1); scale(x1,y1); drawpolygon(x,y); break; case 3:printf("ANGLE OF ROTATION(ANTI-CLOCKWISE IS POSITIVE) : "); scanf("%f",&theta); theta*=3.1415/180; rotate(-theta); drawpolygon(x,y); break; case 4:exit(0); } } }
  27. 27. 27 Output-7 After translation After scaling
  28. 28. 28 After Rotation
  29. 29. 29 Program 8 WRITE A C PROGRAM TO DRAW A RECTANGLE BY USING BRESENHAM AND DDA ALGORITHM. #include<stdio.h> #include<conio.h> #include<graphics.h> #include<math.h> void dda(float x1,float y1,float x2,float y2) { float dx,dy,x=x1,y=y1,m; int i; dx=x2-x1; dy=y2-y1; if(abs(dx)>=abs(dy)) m=abs(dx); else m=abs(dy); putpixel((int)x,(int)y,15); for(i=1;i<m;i++) { x=x+dx/m; y=y+dy/m; putpixel((int)x,(int)y,15); } } void bress(float x1,float y1,float x2,float y2) { int x,y,end,inc=0,p,dx=abs(x2-x1),dy=abs(y2-y1),c=0,current=0; if(dx>dy) { p=2*dy-dx; if(x1<x2) { x=x1;y=y1;end=x2; } if(y1<y2) inc=1; if(y1>y2) inc=-1; } else { x=x2;y=y2;end=x1; if(y2<y1)
  30. 30. 30 inc=1; if(y2>y1) inc=-1; } while(x<=end) { putpixel(x,y,15); if(p<0) p=p+2*dy; else { y=y+inc;p=p+2*(dy-dx); } x++; if(current==0&&c==10) { current=1; c=-1; } if(current==1&&c==6) { current=0; c=-1; } c++; } } void main() { float x1,x2,y1,y2,x3,y3,x4,y4; int ch; int gdriver=DETECT, gmode=DETECT; initgraph(&gdriver, &gmode, "c:tcBGI"); printf("Enter end points of line (x1,y1,x2,y2)"); scanf("%f %f %f %f %f %f %f %f",&x1,&y1,&x2,&y2,&x3,&y3,&x4,&y4); printf("Choose algorithm(1-DDA 2-BRESENHAM)"); scanf("%d",&ch); bress(x1,y1,x2,y2); dda(x2,y2,x3,y3); bress(x4,y4,x3,y3); dda(x4,y4,x1,y1); getch(); closegraph(); }
  31. 31. 31 OUTPUT-8
  32. 32. 32 Program 9 WRITE A C PROGRAM TO DRAW A SOLID AND FIND ITS VANISHING POINT. #include<stdio.h> #include<conio.h> #include<graphics.h> void createsolid(); void main() { int gd = DETECT,gm = DETECT; initgraph(&gd,&gm,"c:tcbgi"); clrscr(); createsolid(); getch(); closegraph(); } void createsolid() { //The coordinates of first rectangle line(250,200,370,200); line(370,200,370,320); line(370,320,250,320); line(250,200,250,320); //The coordinates of scond rectangle line(280,150,400,150); line(400,150,400,270); line(400,270,280,270); line(280,150,280,270); //The coordinates of the lines line(250,200,280,150); line(370,200,400,150); line(370,320,400,270); line(250,320,280,270); //The coordinates of the X,Y and Z axis line(320,300,600,300); line(320,50,320,300); line(320,300,170,450); //Coordinates for vanishing point putpixel(190,430,RED); }
  33. 33. 33 OUTPUT-9
  34. 34. 34 Program 10 WRITE A C PROGRAM TO TRANSLATE A LINE BY USING DDA ALGORITHM. #include<stdio.h> #include<conio.h> #include<graphics.h> #include<math.h> void dda(float x1,float y1,float x2,float y2) { float dx,dy,x=x1,y=y1,m; int i; dx=x2-x1; dy=y2-y1; if(abs(dx)>=abs(dy)) m=abs(dx); else m=abs(dy); putpixel((int)x,(int)y,15); for(i=1;i<=m;i++) { x=x+dx/m; y=y+dy/m; putpixel((int)x,(int)y,15); } } void main() { float x11,x12,y11,y12, x21, x22, y21, y22; float nw; int gd=DETECT,gm=DETECT; initgraph(&gd,&gm,"c:tcbin"); printf("enter endpoints of line(x1,y1,x2,y2)"); scanf("%f%f%f%f",&x11,&x12,&y11,&y12); dda(x11,x12,y11,y12); printf("Please enter new position"); scanf("%f",&nw); x21=x11+nw; y21=y11+nw; x22=x12+nw; y22=y12+nw; dda(x21,x22,y21,y22); getch(); closegraph(); }
  35. 35. 35 OUTPUT-10
  36. 36. 36 Program 11 WRITE A C PROGRAM TO ROTATE A TRIANGLE. #include<stdio.h> #include<conio.h> #include<math.h> #include<graphics.h> void bress(float x1,float y1, float x2,float y2) { int x,y,end,inc=0,p,dx=abs(x2-x1),dy=abs(y2-y1),c=0,current=0; if ( dx > dy ) { p=2*dy-dx; if(x1<x2) { x=x1; y=y1; end=x2; if(y1<y2) inc=1; if(y1>y2) inc=-1; } else { x=x2; y=y2; end=x1; if(y2<y1) inc=1; if(y2>y1) inc=-1; } while(x<=end) { putpixel(x,y,15); if(p<0) p=p+2*dy; else { y=y+inc; p=p+2*(dy-dx);
  37. 37. 37 } x++; if(current==0 && c==10) { current=1; c=-1; } if(current==1 && c==6) { current=0; c=-1; } c++; } } else { p=2*dx-dy; if(y1<y2) { x=x1; y=y1; end=y2; if(x1<x2) inc=1; if(x1>x2) inc=-1; } else { x=x2; y=y2; end=y1; if(x2<x1) inc=1; if(x2>x1) inc=-1; } while(y<=end) { putpixel(x,y,15); if(p<0) p=p+2*dx; else
  38. 38. 38 { x=x+inc; p=p+2*(dx-dy); } y++; if(current==0 && c==10) { current=1; c=-1; } if(current==1 && c==6) { current=0; c=-1; } c++; } } } void main() { float a[3][3],b[3][3],c[3][3],i,j,k; float r=(3.14*45)/180; int gd=DETECT,gm=DETECT; clrscr(); initgraph(&gd,&gm,"c:tcbgi"); //IMAGE(triangle) bress(0,0,100,100); bress(100,100,500,200); bress(500,200,0,0); a[0][0]=0; a[0][1]=0; a[0][2]=1; a[1][0]=100; a[1][1]=100; a[1][2]=1; a[2][0]=500; a[2][1]=200; a[2][2]=1; b[0][0]=cos(r);
  39. 39. 39 b[0][1]=sin(r); b[0][2]=0; b[1][0]=-sin(r); b[1][1]=cos(r); b[1][2]=0; b[2][0]=0; b[2][1]=0; b[2][2]=1; //MATRIX MULTIPLICATION for(i=0;i<3;i++) for(j=0;j<3;j++) { c[i][j]=0; for(k=0;k<3;k++) { c[i][j]+=a[i][k]*b[k][j]; } } //AFTER ROTATION line(c[0][0],c[0][1],c[1][0],c[1][1]); line(c[1][0],c[1][1],c[2][0],c[2][1]); line(c[2][0],c[2][1],c[0][0] ,c[0][1]); getch(); }
  40. 40. 40 OUTPUT-11
  41. 41. 41 Program 12 WRITE A C PROGRAM TO DRAW BEZIER – SURFACE. #include<stdio.h> #include<conio.h> #include<graphics.h> void main() { int gd,gm, x1,x2,x3,x4,y1,y2,y3,y4,y11,y22,y33,y44,i; gd=DETECT,gm=DETECT; clrscr(); initgraph(&gd,&gm,"c:tcbgi"); x1=100;x2=130;x3=170;x4=200;y1=150;y2=16 ;y3=160;x4=165; line(x1,y1,x2,y2); line(x2,y2,x3,y3); line(x3,y3,x4,y4); y11=y1; y22=y2; y33=y3; y44=y4; for(i=0;i<5;i++) { y11=y11+10; y22=y22+10; y33=y33+10; y44=y44+10; line(x1,y11,x2,y22); line(x2,y22,x3,y33); line(x3,y33,x4,y44); } line(x1,y1,x1,y11); line(x2,y2,x2,y22); line(x3,y3,x3,y33); line(x4,y4,x4,y44); getch(); closegraph(); }
  42. 42. 42 OUTPUT-12
  43. 43. 43 Program 13 WRITE A C PROGRAM TO CONVERT WINDOW COORDINATES IN TO VIEW PORT. #include<stdio.h> #include<conio.h> #include<math.h> #include<graphics.h> void bress(float x1,float y1, float x2,float y2) { int x,y,end,inc=0,p,dx=abs(x2-x1),dy=abs(y2-y1),c=0,current=0; if ( dx > dy ) { p=2*dy-dx; if(x1<x2) { x=x1; y=y1; end=x2; if(y1<y2) inc=1; if(y1>y2) inc=-1; } else { x=x2; y=y2; end=x1; if(y2<y1) inc=1; if(y2>y1) inc=-1; } while(x<=end) { putpixel(x,y,15); if(p<0) p=p+2*dy; else { y=y+inc; p=p+2*(dy-dx);
  44. 44. 44 } x++; if(current==0 && c==10) { current=1; c=-1; } if(current==1 && c==6) { current=0; c=-1; } c++; } } else { p=2*dx-dy; if(y1<y2) { x=x1; y=y1; end=y2; if(x1<x2) inc=1; if(x1>x2) inc=-1; } else { x=x2; y=y2; end=y1; if(x2<x1) inc=1; if(x2>x1) inc=-1; } while(y<=end) { putpixel(x,y,15); if(p<0) p=p+2*dx; else
  45. 45. 45 { x=x+inc; p=p+2*(dx-dy); } y++; if(current==0 && c==10) { current=1; c=-1; } if(current==1 && c==6) { current=0; c=-1; } c++; } } } void main() { float x1,x2,x3,x4,y1,y2,y3,y4; double ch; int t; float vx,vy,vx1,vx2,vy2; int gd=DETECT,gm=DETECT; initgraph(&gd,&gm,"c:tcbgi"); outtextxy(250,190,"World coordinates"); bress(200,200,400,200); bress(200,200,200,400); bress(400,200,400,400); bress(200,400,400,400); outtextxy(23,10,"View port"); bress(20,20,100,20); bress(20,20,20,100); bress(100,20,100,100); bress(20,100,100,100); //IMAGE(triangle) bress(250,250,350,250);
  46. 46. 46 bress(250,250,300,300); bress(350,250,300,300); //TRANSFORMATION vx=(((100-20)*(250-200))/(400-200))+20; vy=(((100-20)*(250-200))/(400-200))+20; vx1=(((100-20)*(350-200))/(400-200))+20; vx2=(((100-20)*(300-200))/(400-200))+20; vy2=(((100-20)*(300-200))/(400-200))+20; //TRANSFORMED IMAGE bress(vx,vy,vx1,vy); bress(vx,vy,vx2,vy2); bress(vx1,vy,vx2,vy2); getch(); }
  47. 47. 47 OUTPUT-13

×