Download as pdf or txt
Download as pdf or txt
You are on page 1of 54

1

Code:

// midpoint

#include<stdio.h>

#include<conio.h>

#include<math.h>

#include<graphics.h>

#include<dos.h>

void main()

int xc, yc, x, y, r, gd=DETECT, gm;

float p;

initgraph(&gd, &gm, "C:\\TURBOC3\\BGI");

printf("Enter the circle:");

scanf("%d %d", &xc, &yc);

printf("Enter radius");

scanf("%d", &r);

p = (5/4)-r;

x = 0;

y= r;

line(xc, yc, 600, yc);

line(xc, yc, xc, 10);

while(x <= y)

if(p<0)

x=x+1;

p= p+2*x+3;

}
else

x=x+1;

y=y-1;

p=p+2*(x-y)+5;

putpixel(xc+x, yc-y, 3);

putpixel(xc+y, yc-x, 3);

putpixel(xc+y, yc+x, 3);

putpixel(xc+x, yc+y, 3);

putpixel(xc-x, yc+y, 3);

putpixel(xc-y, yc+x, 3);

putpixel(xc-y, yc-x, 3);

putpixel(xc-x, yc-y, 3);

delay(100);

getch();

Input:

Enter the circle300

300

Enter radius80
Output:
2

Code:

//Breshan circle

#include<stdio.h>

#include<conio.h>

#include<math.h>

#include<graphics.h>

#include<dos.h>

void main()

int xc, yc, x, y, r, gd=DETECT, gm;

float p;

initgraph(&gd, &gm, "C:\\TURBOC3\\BGI");

printf("Enter the circle:");

scanf("%d %d", &xc, &yc);

printf("Enter radius");

scanf("%d", &r);

p = 3-2*r;

x = 0;

y= r;

line(xc, yc, 600, yc);

line(xc, yc, xc, 10);

while(x <= y)

if(p<0)

x=x+1;

p= p+4*x+6;

}
else

x=x+1;

y=y-1;

p=p+4*(x-y)+10;

putpixel(xc+x, yc-y, 3);

putpixel(xc+y, yc-x, 3);

putpixel(xc+y, yc+x, 3);

putpixel(xc+x, yc+y, 3);

putpixel(xc-x, yc+y, 3);

putpixel(xc-y, yc+x, 3);

putpixel(xc-y, yc-x, 3);

putpixel(xc-x, yc-y, 3);

delay(100);

getch();

Input:

Enter the circle300

300

Enter radius80
Output:
3

Code:

//boundary fill

#include<stdio.h>

#include<conio.h>

#include<math.h>

#include<graphics.h>

#include<dos.h>

void bound_fill(int sx,int sy,int fc,int bc){

if((getpixel(sx,sy)!=fc) && getpixel(sx,sy)!=bc){

putpixel(sx,sy,fc);

bound_fill(sx+1,sy,fc,bc);

bound_fill(sx,sy+1,fc,bc);

bound_fill(sx,sy-1,fc,bc);

bound_fill(sx-1,sy,fc,bc);

void main()

int gd=DETECT,gm;

initgraph(&gd,&gm,"c:\\TURBOC3\\BGI");

setcolor(WHITE);

circle(300,200,20);

putpixel(302,205,4);

delay(1000);

bound_fill(300,200,GREEN,WHITE);

getch();

}
Output:
4

Code:

// flood fill

#include<stdio.h>

#include<conio.h>

#include<math.h>

#include<graphics.h>

#include<dos.h>

void flood_fill(int sx, int sy, int fill_color, int old_color);

void main()

int gd=DETECT, gm, old_color=BLACK;

initgraph(&gd, &gm, "C:\\TURBOC3\\BGI");

setcolor(BLUE);

line(325, 180, 300, 220);

setcolor(RED);

line(300, 220, 350, 220);

setcolor(WHITE);

line(350, 220, 325, 180);

flood_fill(325, 207, GREEN, BLACK);

getch();

void flood_fill(int sx, int sy, int fill_color, int old_color)

if(getpixel(sx, sy) == old_color)

putpixel(sx, sy, fill_color);

flood_fill(sx+1, sy, fill_color, old_color);

flood_fill(sx, sy+1, fill_color, old_color);


flood_fill(sx, sy-1, fill_color, old_color);

flood_fill(sx-1, sy, fill_color, old_color);

Output:
5

Code:

//2d rotation

#include<stdio.h>

#include<conio.h>

#include<math.h>

#include<graphics.h>

#include<dos.h>

void main()

int gd=DETECT,gm,i,j,k;

int a[3][3];

float b[3][3],r[3][3],p,t;

initgraph(&gd,&gm,"c:\\TURBOC3\\BGI");

printf("Enter first vertex\n");

scanf("%d%d",&a[0][0],&a[1][0]);

printf("Enter second vertex\n");

scanf("%d%d",&a[0][1],&a[1][1]);

printf("Enter third vertex\n");

scanf("%d%d",&a[0][2],&a[1][2]);

a[2][0]=a[2][1]=a[2][2]=1;

printf("Matrix:\n");

for(i=0;i<3;i++){

for(j=0;j<3;j++){

printf("\t%d",a[i][j]);
}

printf("\n");

line(a[0][0],a[1][0],a[0][1],a[1][1]);

line(a[0][1],a[1][1],a[0][2],a[1][2]);

line(a[0][2],a[1][2],a[0][0],a[1][0]);

printf("Enter rotation angle\n");

scanf("%f",&t);

p=(float) (3.14/180)*t;

b[0][0]=cos(p);

b[0][1]=-sin(p);

b[1][0]=sin(p);

b[1][1]=cos(p);

b[0][2]=b[1][2]=b[2][0]=b[2][1]=0.0;

b[2][2]=1.0;

for(i=0;i<3;i++){

for(k=0;k<3;k++){

r[i][k]=0.0;

for(j=0;j<3;j++){

r[i][k]+=b[i][j]*a[j][k];

}
printf("Matrix:\n");

for(i=0;i<3;i++){

for(j=0;j<3;j++){

printf(" %.2f ",r[i][j]);

printf("\n");

line(floor(r[0][0]+0.5),floor(r[1][0]+0.5),floor(r[0][1]+0.5),floor(r[1][1]+0.5));

line(floor(r[0][1]+0.5),floor(r[1][1]+0.5),floor(r[0][2]+0.5),floor(r[1][2]+0.5));

line(floor(r[0][2]+0.5),floor(r[1][2]+0.5),floor(r[0][0]+0.5),floor(r[1][0]+0.5));

getch();

Input:

Enter first vertex

300

100

Enter second vertex

300

200

Enter third vertex

400

200

Enter rotation angle

10
Output:
6

Code:

//2d scaling

#include<stdio.h>

#include<conio.h>

#include<math.h>

#include<graphics.h>

#include<dos.h>

void main()

int gd=DETECT,gm,i,j,k;

int a[3][3];

float b[3][3],r[3][3],sx,sy;

initgraph(&gd,&gm,"c:\\TURBOC3\\BGI");

printf("Enter first vertex\n");

scanf("%d%d",&a[0][0],&a[1][0]);

printf("Enter second vertex\n");

scanf("%d%d",&a[0][1],&a[1][1]);

printf("Enter third vertex\n");

scanf("%d%d",&a[0][2],&a[1][2]);

a[2][0]=a[2][1]=a[2][2]=1;

printf("Matrix:\n");

for(i=0;i<3;i++){

for(j=0;j<3;j++){

printf("\t%d",a[i][j]);
}

printf("\n");

line(a[0][0],a[1][0],a[0][1],a[1][1]);

line(a[0][1],a[1][1],a[0][2],a[1][2]);

line(a[0][2],a[1][2],a[0][0],a[1][0]);

printf("Enter scaling factor along x\n");

scanf("%f",&sx);

printf("Enter scaling factor along y\n");

scanf("%f",&sy);

b[0][0]=sx;

b[0][1]=0;

b[1][0]=0;

b[1][1]=sy;

b[0][2]=b[1][2]=b[2][0]=b[2][1]=0.0;

b[2][2]=1.0;

for(i=0;i<3;i++){

for(k=0;k<3;k++){

r[i][k]=0.0;

for(j=0;j<3;j++){

r[i][k]+=b[i][j]*a[j][k];

}
}

printf("Matrix:\n");

for(i=0;i<3;i++){

for(j=0;j<3;j++){

printf(" %.2f ",r[i][j]);

printf("\n");

line(floor(r[0][0]+0.5),floor(r[1][0]+0.5),floor(r[0][1]+0.5),floor(r[1][1]+0.5));

line(floor(r[0][1]+0.5),floor(r[1][1]+0.5),floor(r[0][2]+0.5),floor(r[1][2]+0.5));

line(floor(r[0][2]+0.5),floor(r[1][2]+0.5),floor(r[0][0]+0.5),floor(r[1][0]+0.5));

getch();

Input:

Enter first vertex

50

100

Enter second vertex

50

200

Enter third vertex

200

200

Enter scaling factor along x

Enter scaling factor along y


2

Output:
7

Code:

//2d reflection

#include<stdio.h>

#include<conio.h>

#include<math.h>

#include<graphics.h>

#include<dos.h>

void main()

int gd=DETECT,gm,i,j,k;

int a[3][3];

float b[3][3],r[3][3];

initgraph(&gd,&gm,"c:\\TURBOC3\\BGI");

printf("Enter first vertex\n");

scanf("%d%d",&a[0][0],&a[1][0]);

printf("Enter second vertex\n");

scanf("%d%d",&a[0][1],&a[1][1]);

printf("Enter third vertex\n");

scanf("%d%d",&a[0][2],&a[1][2]);

a[2][0]=a[2][1]=a[2][2]=1;

printf("Matrix:\n");

for(i=0; i<3; i++)

for(j=0; j<3; j++)


{

printf("\t%d",a[i][j]);

printf("\n");

line(a[0][0],a[1][0],a[0][1],a[1][1]);

line(a[0][1],a[1][1],a[0][2],a[1][2]);

line(a[0][2],a[1][2],a[0][0],a[1][0]);

b[0][0]=0;

b[0][1]=1.0;

b[1][0]=1.0;

b[1][1]=0;

b[0][2]=b[1][2]=b[2][0]=b[2][1]=0.0;

b[2][2]=1.0;

for(i=0; i<3; i++)

for(k=0; k<3; k++)

r[i][k]=0.0;

for(j=0; j<3; j++)

r[i][k]+=b[i][j]*a[j][k];

}
}

printf("Matrix:\n");

for(i=0; i<3; i++)

for(j=0; j<3; j++)

printf(" %.2f\t",r[i][j]);

printf("\n");

line(r[0][0],r[1][0],r[0][1],r[1][1]);

line(r[0][1],r[1][1],r[0][2],r[1][2]);

line(r[0][2],r[1][2],r[0][0],r[1][0]);

getch();

Input:

Enter first vertex

50

100

Enter second vertex

50

200

Enter third vertex

200

200
Output:
8

Code:

//Liang-barsky line clipping algorithm program

#include<stdio.h>

#include<conio.h>

#include<math.h>

#include<graphics.h>

void main()

int gd=DETECT, gm, k;

float x1, y1, x2, y2, xmin, ymin, xmax, ymax, dx, dy, p[4], q[4], r[4], u1=0.0, u2=1.0;

initgraph(&gd, &gm, "C:\\TURBOC3\\BGI");

clrscr();

printf("\n ENTER THE BOUNDARY OF THE CLIPPING WINDOW(XMIN, YMIN, XMAX, YMAX):");

scanf("%f %f %f %f", &xmin, &ymin, &xmax, &ymax);

printf("\n\n ENTER THE VALUES OF THE TWO END POINTS OF THE LINE( (X1, Y1) AND (X2, Y2) ):");

scanf("%f %f %f %f", &x1, &y1, &x2, &y2);

clrscr();

rectangle(xmin, ymin, xmax, ymax);

line(x1, y1, x2, y2);

getch();

dx = x2 - x1;

dy = y2 - y1;

p[0] = -dx;

p[1] = dx;

p[2] = -dy;

p[3] = dy;

q[0] = x1 - xmin;

q[1] = xmax - x1;


q[2] = y1 - ymin;

q[3] = ymax - y1;

for(k=0; k<=3; k++)

if(p[k] == 0 && q[k] < 0)

printf("\n THE LINE IS COMPLETELY OUTSIDE THE CLIPPING WINDOW......");

getch();

for(k=0; k<=3; k++)

if(p[k] < 0)

r[k] = q[k] / p[k];

u1 = u1>r[k] ? u1 : r[k];

if(p[k] > 0)

r[k] = q[k] / p[k];

u2 = u2<r[k] ? u2 : r[k];

if(u1 > u2)

printf("\n THE LINE IS COMPLETELY OUTSIDE THE CLIPPING WINDOW....");

getch();

if(u1 == 0.0 && u2 == 1.0)


{

printf("\n THE LINE IS COMPLETELY INSIDE THE CLIPPING WINDOW....");

getch();

if((u1 < u2) && (u1 != 0.0) && (u2 != 1.0))

x2 = x1 + (dx * u2);

y2 = y1 + (dy * u2);

x1 = x1 + (dx * u1);

y1 = y1 + (dy * u1);

clrscr();

printf("\n THE REQUIRED CLIPPED LINE IS: ");

rectangle(xmin, ymin, xmax, ymax);

line(x1, y1, x2, y2);

getch();

Input:

ENTER THE BOUNDARY OF THE CLIPPING WINDOW(XMIN, YMIN, XMAX, YMAX):100

100

250

250

ENTER THE VALUES OF THE TWO END POINTS OF THE LINE( (X1, Y1) AND (X2, Y2) ):120

120

300

300
Output:
9

Code:

//dda

#include<stdio.h>

#include<conio.h>

#include<math.h>

#include<graphics.h>

#include<dos.h>

void main(){

int gd=DETECT,gm,xa,ya,xb,yb,dx,dy,step,i;

int h=300,k=200;

float xinc,yinc,x,y;

initgraph(&gd,&gm,"c:\\TURBOC3\\BGI");

printf("enter xa and ya\n");

scanf("%d %d",&xa,&ya);

printf("enter xb and yb\n");

scanf("%d %d",&xb,&yb);

dx=(xb-xa);

dy=(yb-ya);

if(abs(dx)>abs(dy)){

step=abs(dx);

}else{

step=abs(dy);

x=xa; y=ya;

putpixel(x,y,4);

line(h,k,640,k);

line(h,k,h,10);
outtextxy(305,207,"O");f

xinc=(float)dx/step;

yinc=(float)dy/step;

for(i=0;i<=step;i++){

x=x+xinc;

y=y+yinc;

putpixel(h+floor(x+0.5),k-floor(y+0.5),4);

delay(30);

getch();

Input:

Enter xa and ya

100

100

Enter xb and yb

150

150

Output:
10

Code:

//bresenham line generation algo

#include<stdio.h>

#include<conio.h>

#include<math.h>

#include<graphics.h>

void main()

int gd=DETECT,gm,x1,x2,y1,y2,dx,dy,p;

int h=300 ,k=200;

int xs,ys,xe;

initgraph(&gd,&gm,"c:\\TURBOC3\\BGI");

printf("Enter the x1 and y1 value\n");

scanf("%d %d",&x1,&y1);

printf("Enter the x2 and y2 value\n");

scanf("%d %d",&x2,&y2);

dx=abs(x2-x1);

dy=abs(y2-y1);

if(x1<x2)

{xs=x1;

ys=y1;

xe=x2;

else{

xs=x2;

ys=y2;

xe=x1;

}
p=2*dy-dx;

line(h,k,640,k);

line(h,k,h,10);

putpixel(xs,ys,4);

while(xs<=xe)

if(p<0)

xs=xs+1;

p=p+2*dy;

else{

xs=xs+1;

ys=ys+1;

p=p+2*(dy-dx);

putpixel(h+xs,k-ys,4);

getch();

Input:

enter the x1 and y1 value

100

100

Enter the x2 and y2 value

150

150
Output:
11

Code:

//scan line filling program

#include<stdio.h>

#include<conio.h>

#include<graphics.h>

void main()

int n,x[10],y[10],k=0,ymin=1000000,ymax=0,Y,dx,dy,xi[100],gm,gd,temp,i,j,m;

float slope[100];

printf("Enter the number of vertices:");

scanf("%d",&n);

printf("enter the coordinates of vertices:");

for(i=0; i<n; i++)

scanf("%d%d",&x[i],&y[i]);

if(y[i]>ymax)

ymax=y[i];

if(y[i]<ymin)

ymin=y[i];

detectgraph(&gd,&gm);

initgraph(&gd,&gm,"C:\\TURBOC3\\BGI");

x[n]=x[0];

y[n]=y[0];

//draw polygon using all the edges

for(i=0; i<n; i++)

line(x[i],y[i],x[i+1],y[i+1]);
}

for(i=0; i<n; i++)

dx=x[i+1]-x[i];

dy=y[i+1]-y[i];

if(dy==0)slope[i]=1.0;

if(dx==0)slope[i]=0.0;

if(dx!=0 && dy!=0)

slope[i]=(float)dx/dy;

for(j=0; j<=ymax; j++)

k=0;

for(i=0; i<n; i++)

if(((y[i]<=j) && (y[i+1]>j)) || ((y[i]>j) && (y[i+1]<=j)))

xi[k]=(int)(x[i]+slope[i]*(j-y[i]));

k++;

for(m=0; m<k-1; m++)

for(i=0; i<k-1; i++)

if(xi[i]>xi[i+1])

temp=xi[i];

xi[i]=xi[i+1];
xi[i+1]=temp;

setcolor(2);

for(i=0; i<k; i+=2)

line(xi[i],j,xi[i+1]+1,j);

delay(100);

getch();

Input:

Enter the number of vertices:3

enter the coordinates of vertices:100

100

100

200

200

200
Output:
12

Code:

#include<stdio.h>

#include<math.h>

#include<graphics.h>

main()

int x1,y1,x2,y2,gd,gm;

int ymax,a[4][8];

float par[4][4],b[4][8];

int i,j,k,m,n,p;

double L1,phi;

a[0][0] = 100;

a[1][0] = 100;

a[2][0] = 100;

a[0][1] = 200;

a[1][1] = 100;

a[2][1] = 100;

a[0][2] = 200;

a[1][2] = 200;

a[2][2] = 100;

a[0][3] = 100;

a[1][3] = 200;

a[2][3] = 100;
a[0][4] = 100;

a[1][4] = 100;

a[2][4] = 200;

a[0][5] = 200;

a[1][5] = 100;

a[2][5] = 200;

a[0][6] = 200;

a[1][6] = 200;

a[2][6] = 200;

a[0][7] = 100;

a[1][7] = 200;

a[2][7] = 200;

phi = (double) (3.14*45.0)/180 ;

L1 = 0.5;

par[0][0] = 1;

par[0][1] = 0;

par[0][2] = L1*cos(phi);

par[0][3] = 0;

par[1][0] = 0;

par[1][1] = 1;

par[1][2] = L1*sin(phi);

par[1][3] = 0;

par[2][0] = 0;
par[2][1] = 0;

par[2][2] = 0;

par[2][3] = 0;

par[3][0] = 0;

par[3][1] = 0;

par[3][2] = 0;

par[3][3] = 1;

m=4;

n=4;

p=8;

for(i=0; i<m; i++)

for(k=0; k<p; k++)

b[i][k] = 0;

for(i=0; i<m; i++)

for(k=0; k<p; k++)

for(j=0; j<n; j++)

b[i][k] += (float)par[i][j] * a[j][k];

detectgraph(&gd,&gm);

initgraph(&gd,&gm, "c:\\tc\\bgi");

ymax = getmaxy();

/*- front plane display -*/


for(j=0; j<3; j++)

x1=(int) b[0][j];

y1=(int) b[1][j];

x2=(int) b[0][j+1];

y2=(int) b[1][j+1];

line( x1,ymax-y1,x2,ymax-y2);

x1=(int) b[0][3];

y1=(int) b[1][3];

x2=(int) b[0][0];

y2=(int) b[1][0];

line( x1,ymax-y1,x2,ymax-y2);

/*- back plane display -*/

setcolor(11);

for(j=4; j<7; j++)

x1=(int) b[0][j];

y1=(int) b[1][j];

x2=(int) b[0][j+1];

y2=(int) b[1][j+1];

line( x1,ymax-y1,x2,ymax-y2);

x1=(int) b[0][7];
y1=(int) b[1][7];

x2=(int) b[0][4];

y2=(int) b[1][4];

line( x1,ymax-y1,x2,ymax-y2);

setcolor(13);

for(i=0; i<4; i++)

x1=(int) b[0][i];

y1=(int) b[1][i];

x2=(int) b[0][4+i];

y2=(int) b[1][4+i];

line( x1,ymax-y1,x2,ymax-y2);

getch();

getch();

}
Output:
13

Code:

#include<stdio.h>

#include<math.h>

#include<graphics.h>

main()

int x1,y1,x2,y2,gd,gm;

int ymax,a[4][8];

float par[4][4],b[4][8];

int i,j,k,m,n,p;

int xp, yp, zp, x, y, z;

a[0][0] = 100;

a[1][0] = 100;

a[2][0] = -100;

a[0][1] = 200;

a[1][1] = 100;

a[2][1] = -100;

a[0][2] = 200;

a[1][2] = 200;

a[2][2] = -100;

a[0][3] = 100;

a[1][3] = 200;

a[2][3] = -100;
a[0][4] = 100;

a[1][4] = 100;

a[2][4] = -200;

a[0][5] = 200;

a[1][5] = 100;

a[2][5] = -200;

a[0][6] = 200;

a[1][6] = 200;

a[2][6] = -200;

a[0][7] = 100;

a[1][7] = 200;

a[2][7] = -200;

detectgraph(&gd,&gm);

initgraph(&gd,&gm, "c:\\tc\\bgi");

ymax = getmaxy();

xp = 300;

yp = 320;

zp = 100;

for(j=0; j<8; j++)

x = a[0][j];

y = a[1][j];

z = a[2][j];
b[0][j] = xp - ( (float)( x - xp )/(z - zp)) * (zp);

b[1][j] = yp - ( (float)( y - yp )/(z - zp)) * (zp);

/*- front plane display -*/

for(j=0; j<3; j++)

x1=(int) b[0][j];

y1=(int) b[1][j];

x2=(int) b[0][j+1];

y2=(int) b[1][j+1];

line( x1,ymax-y1,x2,ymax-y2);

x1=(int) b[0][3];

y1=(int) b[1][3];

x2=(int) b[0][0];

y2=(int) b[1][0];

line( x1, ymax-y1, x2, ymax-y2);

/*- back plane display -*/

setcolor(11);

for(j=4; j<7; j++)

x1=(int) b[0][j];

y1=(int) b[1][j];

x2=(int) b[0][j+1];
y2=(int) b[1][j+1];

line( x1, ymax-y1, x2, ymax-y2);

x1=(int) b[0][7];

y1=(int) b[1][7];

x2=(int) b[0][4];

y2=(int) b[1][4];

line( x1, ymax-y1, x2, ymax-y2);

setcolor(7);

for(i=0; i<4; i++)

x1=(int) b[0][i];

y1=(int) b[1][i];

x2=(int) b[0][4+i];

y2=(int) b[1][4+i];

line( x1, ymax-y1, x2, ymax-y2);

getch();

getch();

}
Output:
14

Code:

#include<stdio.h>

#include<conio.h>

#include<graphics.h>

int x,y,z;

int C(int n,int j);

float blend(int j,int n,float u);

void bezier(float u,int n, int p[4][3]);

void main()

float u;

int gd,gm,ymax,i,n,c[4][3];

for(i=0; i<4; i++)

c[i][0]=0;

c[i][1]=0;

printf("\n\n Enter four points : \n\n");

for(i=0; i<4; i++)

printf("\t X%d Y%d : ",i,i);

scanf("%d %d",&c[i][0],&c[i][1]);
}

c[4][0]=c[0][0];

c[4][1]=c[0][1];

detectgraph(&gd,&gm);

initgraph(&gd,&gm,"C:\\Turboc3\\bgi");

ymax = 480;

setcolor(13);

for(i=0; i<3; i++)

line(c[i][0],ymax-c[i][1],c[i+1][0],ymax-c[i+1][1]);

setcolor(3);

n=3;

for(i=0; i<=40; i++)

u=(float)i/40.0;

bezier(u,n,c);

if(i==0)

moveto(x,ymax-y);

}
else

lineto(x,ymax-y);

getch();

getch();

void bezier(float u,int n, int p[4][3])

int j;

float v,b;

float blend(int,int,float);

x=0;

y=0;

z=0;

for(j=0; j<=n; j++)

b=blend(j,n,u);

x=x+(p[j][0]*b);

y=y+(p[j][1]*b);

z=z+(p[j][2]*b);

}
float blend(int j,int n,float u)

int k;

float v,blend;

v=C(n,j);

for(k=0; k<j; k++)

v*=u;

for(k=1; k<=(n-j); k++)

v *= (1-u);

blend=v;

return(blend);

int C(int n,int j)

int k,a,c;

a=1;

for(k=j+1; k<=n; k++)

a*=k;

for(k=1; k<=(n-j); k++)

a=a/k;

}
c=a;

return(c);

Input:

Enter four points

X0 y0:200

300

X1 y1:300

400

X2 y2:300

300

X3 y3:100

200

Output:
15

Code:

//viewing transformation

#include<graphics.h>

#include<conio.h>

#include<stdio.h>

void main ()

int W_xmax, W_ymax, W_xmin, W_ymin;

int V_xmax, V_ymax, V_xmin, V_ymin;

float sx, sy;

int x, x1, x2, y, y1, y2;

int gr = DETECT, gm;

initgraph (&gr, &gm, "C:\\TURBOC3\\BGI");

printf ("\n*** Window to Viewport ****\n");

printf ("Enter the coordinates for triangle \n x and y = ");

scanf ("%d %d", &x, &y);

printf ("\n x1 and y1 = ");

scanf ("%d %d", &x1, &y1);

printf ("\n x2 and y2 = ");

scanf ("%d %d", &x2, &y2);

printf ("Please enter Window coordinates \n First enter XMax, YMax =");

scanf ("%d %d", &W_xmax, &W_ymax);

printf ("\n Now, enter XMin, YMin =");

scanf ("%d %d", &W_xmin, &W_ymin);

cleardevice ();

delay (50);

//Window

rectangle (W_xmin, W_ymin, W_xmax, W_ymax);


outtextxy (W_xmin, W_ymin - 10, "Window");

//drawing a triangle

line (x, y, x1, y1);

line (x1, y1, x2, y2);

line (x2, y2, x, y);

// viewport

V_xmin = 300;

V_ymin = 30;

V_xmax = 550;

V_ymax = 350;

rectangle (V_xmin, V_ymin, V_xmax, V_ymax);

outtextxy (V_xmin, V_ymin - 10, "Viewport");

// calculatng Sx and Sy

sx = (float) (V_xmax - V_xmin) / (W_xmax - W_xmin);

sy = (float) (V_ymax - V_ymin) / (W_ymax - W_ymin);

x = V_xmin + (float) ((x - W_xmin) * sx);

x1 = V_xmin + (float) ((x1 - W_xmin) * sx);

x2 = V_xmin + (float) ((x2 - W_xmin) * sx);

y = V_ymin + (float) ((y - W_ymin) * sy);

y1 = V_ymin + (float) ((y1 - W_ymin) * sy);

y2 = V_ymin + (float) ((y2 - W_ymin) * sy);

// drawing triangle

line (x, y, x1, y1);

line (x1, y1, x2, y2);

line (x2, y2, x, y);

getch ();

closegraph ();

}
Input:

Output:

You might also like