Computer Graphics Lab File C Programs
-
Upload
kandarp-tiwari -
Category
Education
-
view
596 -
download
13
description
Transcript of Computer Graphics Lab File C Programs
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
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
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
OUTPUT-1
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
initgraph(& driver,& mode,"c:\tc\bgi");
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
OUTPUT-2
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("\n\t ENTER THE COORDINATES OF WINDOW: \n");
printf("\n\t wxmin,wymin: "); scanf("%f%f",&wxmax,&wymax);
printf("\n\t ENTER THE COORDINATES OF VIEW: \n"); printf("\n\t vxmin,vymin: "); scanf("%f%f",&vxmin,&vymin);
printf("\n\t 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("\n\n\t ENTER THE COORDINATES OF LINE: ");
printf("\n\n\t X1 Y1: "); scanf("%f%f",&x1,&y1);
printf("\n\n\t X2 Y2: "); scanf("%f%f",&x2,&y2);
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
OUTPUT-3
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
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
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:\\TC\\BGI");
printf("\n\n\tEnter the co-ordinates of Line :");
printf("\n\n\tX1 Y1 : "); scanf("%f %f",&x1,&y1);
printf("\n\n\tX2 Y2 : "); scanf("%f %f",&x2,&y2);
printf("\n\tEnter the co_ordinates of window :\n "); printf("\n\txwmin , ywmin : "); scanf("%f %f",&xwmin,&ywmin);
printf("\n\txwmax , 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
OUTPUT-4
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:\\tc\\bgi"); outtextxy(10, 460, "Press Esc to exit.");
outtextxy(400, 460, "Present position : "); moveto(getmaxx() / 2, getmaxy() / 2);
do {
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
*(y+i)=ypos;
i++; break;
} if (i==4) {
bezier(x,y); i=0;
} } while(key!=27);
closegraph(); getch();
}
18
Output-5
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
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
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:\\tc\\bgi"); 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
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
OUTPUT-6
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
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
printf("1)TRANSLATE\n");
printf("2)SCALE\n"); printf("3)ROTATE\n");
printf("4)EXIT\n"); 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
Output-7
After translation
After scaling
28
After Rotation
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
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:\\tc\\BGI");
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
OUTPUT-8
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:\\tc\\bgi"); 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
OUTPUT-9
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:\tc\bin"); 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
OUTPUT-10
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
}
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
{
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:\\tc\\bgi");
//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
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
OUTPUT-11
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:\\tc\\bgi"); 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
OUTPUT-12
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
}
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
{
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:\\tc\\bgi"); 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
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
OUTPUT-13