29
Computer graphics Practical file AMITY UNIVERSITY HARYANA

computer graphics practicals

Embed Size (px)

Citation preview

Computer graphicsPractical file

AMITY UNIVERSITY

HARYANA

Submitted by : MANOJ KUMAR

B.tech(cse)

Sem-4

LIST OF CONTENTS

S.NO

Programs page no

date T.sign

1 Write a program to Draw Graphics Objects

3

2 Write a program to draw 2D bar 5

3 Write a program to draw Pattern fill

7

4 Write a program to draw PIE Chart 8

5 Write a program for Boundary Fill 9

6 Write a program for Flood fill 11

7 Write a program for Translatation of object

13

8 Write a program for Scaling of object

15

9 Write a program for Rotation of object

17

10 Write a program for Window to viewport transformation

19

11 Write a program for Shearing of object

23

2

1)Write a program to Draw Graphics Objects.#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

#include<dos.h>

#include<graphics.h>

void bfill4(int x,int y)

{int c,f=2,b=0;

c=getpixel(x,y);

if((c!=b)&&(c!=f))

{

putpixel(x,y,f);

delay(1);

bfill4(x+1,y);

bfill4(x-1,y);

bfill4(x,y+1);

bfill4(x,y-1);

}

}

void bfill4(int,int);

void main()

{

int gd=DETECT,gm;

int i=0,m=0;

initgraph(&gd,&gm,"..\\bgi");

while(i<500)

{

3

cleardevice();

i++;

line(80+i,300,90+i,270);

line(90+i,270,120+i,270);

line(120+i,270,160+i,240);

line(160+i,240,230+i,240);

line(230+i,240,275+i,270);

line(275+i,270,310+i,270);

line(310+i,270,335+i,290);

line(335+i,290,335+i,300);

line(255+i,300,335+i,300);

line(180+i,300,210+i,300);

line(80+i,300,135+i,300);

circle(232+i,300,18);

circle(157+i,300,18);

bfill4(232+i,300);

delay(5);

}

getch();

closegraph();

}

4

2)Write a program to draw 2D bar.#include<graphics.h>

#include<conio.h>

Void main()

{

int gd = DETECT, gm;

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

setcolor(YELLOW);

rectangle(0,30,639,450);

settextstyle(SANS_SERIF_FONT,HORIZ_DIR,2);

setcolor(WHITE);

outtextxy(275,0,"Bar Chart");

setlinestyle(SOLID_LINE,0,2);

line(100,420,100,60);

line(100,420,600,420);

line(90,70,100,60);

line(110,70,100,60);

line(590,410,600,420);

line(590,430,600,420);

outtextxy(95,35,"Y");

outtextxy(610,405,"X");

outtextxy(85,415,"O");

setfillstyle(LINE_FILL,BLUE);

bar(150,100,200,419);

setfillstyle(XHATCH_FILL,RED);

bar(225,150,275,419);

setfillstyle(WIDE_DOT_FILL,GREEN);

5

bar(300,200,350,419);

setfillstyle(INTERLEAVE_FILL,MAGENTA);

bar(375,125,425,419);

setfillstyle(HATCH_FILL,BROWN);

bar(450,175,500,419);

getch();

}

6

3)Write a program for Pattern fill.#include <graphics.h>

#include <stdlib.h>

#include <stdio.h>

#include <conio.h>

int main(void)

{

int gdriver = DETECT, gmode, errorcode;

int midx, midy, i;

initgraph(&gdriver, &gmode, "c:\\tc\\bgi");

errorcode = graphresult();

if (errorcode != grOk

{

printf("Graphics error: %s\n", grapherrormsg(errorcode));

printf("Press any key to halt:");

getch();

exit(1);

}

midx = getmaxx() / 2;

midy = getmaxy() / 2;

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

{

setfillstyle(i, RED);

bar(midx-50, midy-50, midx+50,midy+50);

rectangle(midx-50,midy-50,midx+50,midy+50);

}

7

getch();

}

4)Write a program to draw PIE Chart.#include<graphics.h>

#include<conio.h>

main()

{

int gd = DETECT, gm, midx, midy;

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

setcolor(MAGENTA);

rectangle(0,40,639,450);

settextstyle(SANS_SERIF_FONT,HORIZ_DIR,2);

setcolor(WHITE);

outtextxy(275,10,"Pie Chart");

midx = getmaxx()/2;

midy = getmaxy()/2;

setfillstyle(LINE_FILL,BLUE);

pieslice(midx, midy, 0, 75, 100);

outtextxy(midx+100, midy - 75, "20.83%");

setfillstyle(XHATCH_FILL,RED);

pieslice(midx, midy, 75, 225, 100);

outtextxy(midx-175, midy - 75, "41.67%");

8

setfillstyle(WIDE_DOT_FILL,GREEN);

pieslice(midx, midy, 225, 360, 100);

outtextxy(midx+75, midy + 75, "37.50%");

getch();

return 0;

}

9

5)Write a program for Boundary Fill of polygons.#include<stdio.h>

#include<conio.h>

#include<dos.h>

#include<graphics.h>

void bfill4(int x,int y,int f,int b)

{int c;

c=getpixel(x,y);

if((c!=b)&&(c!=f))

{

putpixel(x,y,f);

delay(1);

bfill4(x+1,y,f,b);

bfill4(x-1,y,f,b);

bfill4(x,y+1,f,b);

bfill4(x,y-1,f,b);

}

}

void bfill4(int,int,int,int);

void bfill8(int x,int y,int f,int b)

{

int d;

d=getpixel(x,y);

if((d!=b)&&(d!=f))

{

putpixel(x,y,f);

10

delay(1);

bfill8(x-1,y+1,f,b);

bfill8(x+1,y,f,b);

bfill8(x-1,y,f,b);

bfill8(x+1,y+1,f,b);

bfill8(x-1,y-1,f,b);

bfill8(x+1,y-1,f,b);

bfill8(x,y+1,f,b);

bfill8(x,y-1,f,b);

}

}

void bfill8(int,int,int,int);

void main()

{

clrscr();

int gd=DETECT,gm;

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

settextstyle(2,0,6);

outtextxy(5,20,"4-connected b fill");

rectangle(10,50,70,100);

bfill4(55,55,4,15);

outtextxy(205,20,"8-connected b fill");

rectangle(220,50,280,100);

bfill8(255,55,2,15);

getch();

}

11

12

6) Write a program for flood Fill of polygons.#include<stdio.h>

#include<conio.h>

#include<graphics.h>

#include<dos.h>

void flood_fill(int x, int y, int ncolor, int ocolor)

{

if (getpixel(x, y) == ocolor)

{ putpixel(x, y, ncolor);

delay(0);

flood_fill(x + 1, y, ncolor, ocolor);

flood_fill(x, y - 1, ncolor, ocolor);

flood_fill(x, y + 1, ncolor, ocolor);

flood_fill(x - 1, y, ncolor, ocolor);

}

}

void main()

{

int gd=DETECT,gm;

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

int ncolor, ocolor;

printf("Enter old color : ");

scanf("%d", &ocolor);

printf("Enter new color : ");

scanf("%d", &ncolor);

13

setcolor(RED);

line(550,100,600,100);

setcolor(GREEN);

line(550,100,550,150);

setcolor(BLUE);

line(600,100,600,150);

setcolor(WHITE);

line(550,150,600,150);

flood_fill(560,130, ncolor, ocolor);

getch();

}

14

7)Write a program for Translatation of objects.#include<graphics.h>

#include<conio.h>

#include<stdio.h>

#include<iostream.h>

void draw(int,int,int,int,int,int,int,int);

void translation(int [][3],int[][3]);

void main()

{int gd=DETECT,gm;

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

int x1,y1,x2,y2,x3,y3,x4,y4;

printf("entre four coordinate");

scanf("%d%d%d%d%d%d%d%d",&x1,&y1,&x2,&y2,&x3,&y3,&x4,&y4);

draw(x1,y1,x2,y2,x3,y3,x4,y4);

int obj[5][3]={

{x1,y1,1},

{x2,y2,1},

{x3,y3,1},

{x4,y4,1},

{x1,y1,1}

};

int tx,ty;

printf(" enter translation factor");

scanf("%d%d",&ty,&tx);

int trans[3][3]={ {1,0,0},

{0,1,0},

15

{-tx,-ty,1},

};

translation(obj,trans);

getch();

}

void draw(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4)

{

line(x1,y1,x2,y2);

line(x2,y2,x3,y3);

line(x3,y3,x4,y4);

line(x4,y4,x1,y1);

}

void translation(int obj[][3],int trans[][3])

{

int c[5][3];

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

{ for(int j=0;j<=2;j++)

{

c[i][j]=0;

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

{

c[i][j]=c[i][j]+obj[i][k]*trans[k][j];

}

}

}

draw(c[0][0],c[0][1],c[1][0],c[1][1],c[2][0],c[2][1],c[3][0],c[3][1]);

16

}

17

8) Write a program for scaling of objects.#include<graphics.h>

#include<conio.h>

#include<iostream.h>

void draw(int,int,int,int,int,int);

void scaling(int[][2],int[][2]);

void main()

{

int gd=DETECT,gm,x1,y1,x2,y2,x3,y3,sx,sy;

initgraph(&gd,&gm,"..\\bgi");

cout<<"enter coordinate for first vertex of triangle:";

cin>>x1>>y1;

cout<<"enter for second vertex:";

cin>>x2>>y2;

cout<<"enter for third :";

cin>>x3>>y3;

draw(x1,y1,x2,y2,x3,y3);

int object[4][2]={ {x1,y1},

{x2,y2},

{x3,y3},

{x1,y1}

};

cout<<"\n enter x scaling:";

cin>>sx;

cout<<"\n y scaling";

cin>>sy;

18

int scale[2][2]={ {sx,0},

{0,sy}

};

scaling(object,scale);

getch();

closegraph();

}

void draw(int x1,int y1,int x2,int y2,int x3,int y3)

{

cout<<x1<<y1<<x2<<y2<<x3<<y3;

line(x1,y1,x2,y2);

line(x2,y2,x3,y3);

line(x3,y3,x1,y1);

}

void scaling(int object[][2],int scale[][2])

{ int c[4][2];

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

{

for(int j=0;j<=1;j++)

{ c[i][j]=0;

for(int k=0;k<=1;k++)

{

c[i][j]=c[i][j]+object[i][k]*scale[k][j];

}

}

}

draw(c[0][0],c[0][1],c[1][0],c[1][1],c[2][0],c[2][1]);

19

}

20

9) write a program for rotation of objects#include<graphics.h>

#include<conio.h>

#include<iostream.h>

#include<math.h>

#include<stdio.h>

void draw(float [][2]);

void rotation(float[][2],float[][2]);

void main()

{

int gd=DETECT,gm,x1,y1,x2,y2,x3,y3;

float theta,a1,a2,a3;

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

cout<<"enter coordinate for first vertex of triangle:";

cin>>x1>>y1;

cout<<"enter for second vertex:";

cin>>x2>>y2;

cout<<"enter for third :";

cin>>x3>>y3;

float object[3][2]={ {x1,y1},

{x2,y2},

{x3,y3}

};

draw(object);

cout<<"\n enter rotation angle:";

cin>>theta;

21

theta=theta*(3.14/180);

a1=cos(theta);

a2=-sin(theta);

a3=sin(theta);

float rotate[2][2]={

{a1,a2},

{a3,a1},

};

rotation(object,rotate);

getch();

closegraph();

}

void draw(float m[][2])

{

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

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

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

}

void rotation(float object[][2],float rotate[][2])

{ float c[3][2];

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

{

for(int j=0;j<=1;j++)

{

c[i][j]=0;

for(int k=0;k<=1;k++)

{

22

c[i][j]=c[i][j]+object[i][k]*rotate[k][j];

}

}

}

draw(c);

}

10) Write a program for window to viewport transformation

#include <graphics.h>

#include <stdlib.h>

#include <stdio.h>

#include <conio.h>

#include<dos.h>

void draw(int ,int ,int ,int,int,int,int,int);

void translation2(int ,int ,int ,int,int,int,int,int,int,int);

void transaction(int,int,int,int,int,int,int,int);

void scaling(int,int,int ,int ,int,int,int,int,int,int,int,int);

void main()

{

int gd = DETECT, gm;

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

int x1,y1,x2,y2,x3,y3,x4,y4;

printf("enter the coordinates of window");

scanf("%d%d%d%d%d%d%d%d",&x1,&y1,&x2,&y2,&x3,&y3,&x4,&y4);

draw(x1,y1,x2,y2,x3,y3,x4,y4);

transaction(x1,y1,x2,y2,x3,y3,x4,y4);

23

getch();

}

void draw(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4)

{

line(x1,y1,x2,y2);

line(x2,y2,x3,y3);

line(x3,y3,x4,y4);

line(x4,y4,x1,y1);

}

void transaction(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4)

{

int object[][3]={

{x1,y1,1},

{x2,y2,1},

{x3,y3,1},

{x4,y4,1}

} ;

int tx,ty,sx,sy;

printf("enter the transaction factor");

scanf("%d%d",&tx,&ty);

int trans[][3]={

{1,0,0},

{0,1,0},

{-tx,-ty,1}

};

int c[4][3],i,j,k;

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

24

{

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

{

c[i][j]=0;

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

{

c[i][j]=c[i][j]+object[i][k]*trans[k][j];

}

}

}

draw(c[0][0],c[0][1],c[1][0],c[1][1],c[2][0],c[2][1],c[3][0],c[3][1]);

scaling(c[0][0],c[0][1],c[1][0],c[1][1],c[2][0],c[2][1],c[3][0],c[3][1],x1,y1,x4,y2);

}

void scaling(int x5,int y5,int x6,int y6,int x7,int y7,int x8,int y8,int x1,int y1,int x4,int y2)

{

int newobj[][3]={

{x5,y5,1},

{x6,y6,1},

{x7,y7,1},

{x8,y8,1}

};

int sx,sy,x9,y9,x10,y10,x11,y11,x12,y12;

printf("enter the coordinates of view port");

scanf("%d%d%d%d%d%d%d%d",&x9,&y9,&x10,&y10,&x11,&y11,&x12,&y12);

draw(x9,y9,x10,y10,x11,y11,x12,y12);

sx=((y10-y9)/(y2-y1));

25

sy=((x12-x9)/(x4-x1));

int scale[][3]={

{sx,0,0},

{0,sy,0},

{0,0,1}

};

int r[4][3],i,j,k;

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

{

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

{ r[i][j]=0;

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

{

r[i][j]=r[i][j]+newobj[i][k]*scale[k][j];

}

}

}

draw(r[0][0],r[0][1],r[1][0],r[1][1],r[2][0],r[2][1],r[3][0],r[3][1]);

translation2(r[0][0],r[0][1],r[1][0],r[1][1],r[2][0],r[2][1],r[3][0],r[3][1],x9,y9);

}

void translation2(int x5,int y5,int x6,int y6,int x7,int y7,int x8,int y8,int x9,int y9)

{

int object[][3]={

{x5,y5,1},

{x6,y6,1},

{x7,y7,1},

{x8,y8,1}

26

} ;

int tx,ty,sx,sy;

tx=(x9);

ty=(y9);

int trans[][3]={ {1,0,0},

{0,1,0},

{tx,ty,1}

};

int c[4][3],i,j,k;

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

{

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

{ c[i][j]=0;

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

{

c[i][j]=c[i][j]+object[i][k]*trans[k][j];

}

}

}

draw(c[0][0],c[0][1],c[1][0],c[1][1],c[2][0],c[2][1],c[3][0],c[3][1]);

}

27