Computer Graphics LAB: Submitted To Submitted by Mrs. Savita Khatri Mohit Kumar CSE/14/113 14002001032
Computer Graphics LAB: Submitted To Submitted by Mrs. Savita Khatri Mohit Kumar CSE/14/113 14002001032
Computer Graphics LAB: Submitted To Submitted by Mrs. Savita Khatri Mohit Kumar CSE/14/113 14002001032
GRAPHICS
LAB
SUBMITTED TO
SUBMITTED BY
MRS. SAVITA KHATRI
KUMAR
MOHIT
CSE/14/113
14002001032
Table of Contents
PROGRAM 1
SOURCE.........................................................................................................4
OUTPUT.........................................................................................................5
PROGRAM 2
SOURCE.........................................................................................................6
OUTPUT.........................................................................................................8
PROGRAM 3
SOURCE.........................................................................................................9
OUTPUT.......................................................................................................11
PROGRAM 4
SOURCE.......................................................................................................12
OUTPUT.......................................................................................................14
PROGRAM 5
SOURCE.......................................................................................................15
OUTPUT.......................................................................................................17
PROGRAM 6
SOURCE.......................................................................................................18
OUTPUT.......................................................................................................20
PROGRAM 7
TO PERFORM 2D TRANSLATION, SCALING AND
ROTATION.......................................................................................................21
SOURCE.......................................................................................................21
OUTPUT.......................................................................................................24
PROGRAM 8 WINDOW TO VIEW PORT MAPPING............................................27
SOURCE.......................................................................................................27
OUTPUT.......................................................................................................29
PROGRAM 9 IMPLEMENTATION OF COHEN SUTHERLAND ALGORITHM..........30
SOURCE.......................................................................................................30
3
OUTPUT.......................................................................................................33
ROGRAM 1
SOURCE
#include<iostream.h>
#include<graphics.h>
#include<conio.h>
void main() {
int gdriver=DETECT,gmode;
initgraph(&gdriver,&gmode,"c:\\tc\\bgi");
int x,y,x1,y1,x2,y2,dx,dy,steps,xin,yin,i;
cout<<"\n Enter co-ordinates 1st : ";
cin>>x1>>y1;
cout<<"\n Enter co-ordinates 2nd : ";
cin>>x2>>y2;
dx=x2-x1;
dy=y2-y1;
if(dx>=dy) {
steps=dx;
}
else {
steps=dy;
}
xin=dx/steps;
yin=dy/steps;
for(i=0;i<steps;i++) {
putpixel(x1,y1,4);
x1=x1+xin;
y1=y1+yin;
}
getch();
}
OUTPUT
PROGRAM 2
DRAW A LINE
USING
BRESENHAMS
ALGORITHM
SOURCE
#include<iostream.h>
#include<conio.h>
#include<graphics.h>
void main() {
int gd = DETECT , gm;
initgraph(&gd,&gm,"c:\\tc\\bgi");
cleardevice();
int x1,y1,x2,y2;
cout<<"Enter Point 1 : ";
cin>>x1>>y1;
cout<<"Enter Point 2 : ";
cin>>x2>>y2;
int dx,dy;
dx = x2-x1;
dy = y2-y1;
7
OUTPUT
PROGRAM 3
DRAW A CIRCLE
USING MID - POINT
ALGORITHM
SOURCE
#include<iostream.h>
#include<conio.h>
#include<graphics.h>
void draw(int x,int y,int c) {
int a = 320;
int b = 240;
putpixel(x+a,y+b,c);
putpixel(x+a,-y+b,c);
putpixel(-x+a,y+b,c);
putpixel(-x+a,-y+b,c);
putpixel(y+a,x+b,c);
putpixel(-y+a,x+b,c);
putpixel(y+a,-x+b,c);
putpixel(-y+a,-x+b,c);
}
void main() {
int gd=DETECT,gm;
initgraph(&gd,&gm,"..//BGI");
int r;
cout<<"Enter Radius of the circle to be drawn : ";
cin>>r;
int x,y,h;
10
x = 0 , y = r;
h = 1-r;
while(y>x) {
if(h<0)
h+=(2*x)+3;
else {
h+=(2*x)-(2*y)+5;
--y;
}
++x;
draw(x,y,15);
}
getch();
closegraph();
}
11
OUTPUT
12
PROGRAM 4
DRAW A CIRCLE
USING
BRESENHAMS
CIRCLE
ALGORITHM
SOURCE
#include<iostream.h>
#include<conio.h>
#include<graphics.h>
void draw(int x,int y,int c) {
int a = 320;
int b = 240;
putpixel(x+a,y+b,c);
putpixel(x+a,-y+b,c);
putpixel(-x+a,y+b,c);
putpixel(-x+a,-y+b,c);
putpixel(y+a,x+b,c);
putpixel(y+a,-x+b,c);
13
putpixel(-y+a,x+b,c);
putpixel(-y+a,-x+b,c);
}
void main() {
int gd = DETECT,gm;
initgraph(&gd,&gm,"..//BGI");
int r;
cout<<"Enter Radius of the circle to be drawn : ";
cin>>r;
int x,y,d;
x = 0, y = r;
d = 3 - (2 * r);
while(x<y) {
if(d<=0)
d+=(4*x)+6;
else {
d+=4*(x-y)+10;
--y;
}
++x;
draw(x,y,15);
}
getch();
closegraph();
}
14
OUTPUT
15
PROGRAM 5
FILL A POLYGON
USING BOUNDARY
FILL ALGORITHM
SOURCE
#include<graphics.h>
#include<conio.h>
#include<iostream.h>
voidrightFill(intx,inty,intb_col,intf_col){
if(getpixel(x,y)!=b_col&&getpixel(x,y)!=f_col){
putpixel(x,y,f_col);
rightFill(x+1,y,b_col,f_col);
rightFill(x,y+1,b_col,f_col);
rightFill(x,y-1,b_col,f_col);
}
}
voidleftFill(intx,inty,intb_col,intf_col){
if(getpixel(x,y)!=b_col&&getpixel(x,y)!=f_col){
putpixel(x,y,f_col);
leftFill(x-1,y,b_col,f_col);
leftFill(x,y-1,b_col,f_col);
leftFill(x,y+1,b_col,f_col);
}
}
void main(){
intgd = DETECT,gm;
initgraph(&gd,&gm,"..//BGI");
16
intbcol=15,fcol=1;
setcolor(bcol);
line(100,100,300,100);
line(300,100,300,300);
line(100,100,100,300);
line(100,300,300,300);
int x = 200,y = 200;
rightFill(x,y,bcol,fcol);
leftFill(x-1,y,bcol,fcol);
getch();
closegraph();
}
17
OUTPUT
18
PROGRAM 6
FILL A POLYGON
USING FLOOD FILL
ALGORITHM
SOURCE
#include<conio.h>
#include<graphics.h>
void left(int x,int y,int back_col,int f_col) {
if(getpixel(x,y)==back_col) {
putpixel(x,y,f_col);
left(x-1,y,back_col,f_col);
left(x,y+1,back_col,f_col);
left(x,y-1,back_col,f_col);
}
}
void right(int x,int y,int back_col,int f_col) {
if(getpixel(x,y)==back_col) {
putpixel(x,y,f_col);
right(x+1,y,back_col,f_col);
right(x,y+1,back_col,f_col);
right(x,y-1,back_col,f_col);
}
}
void main() {
int gd = DETECT,gm;
initgraph(&gd,&gm,"..//BGI");
int back_col=0,f_col=4;
19
int x=320,y=320;
setcolor(15);
line(100,340,540,340);
line(100,140,100,340);
line(100,140,540,140);
line(540,140,540,340);
right(x,y,back_col,f_col);
left(x-1,y,back_col,f_col);
getch();
closegraph();
}
20
OUTPUT
21
PROGRAM 7
TO PERFORM 2D
TRANSLATION,
SCALING AND
ROTATION
SOURCE
#include<iostream.h>
#include<conio.h>
#include<graphics.h>
#include<math.h>
void translate(int x1,int y1,int x2, int y2,int color) {
int dx=0,dy=0;
cout<<"Enter dx and dy : ";
cin>>dx>>dy;
setcolor(color);
outtextxy(x1+10,y1-10,"Old");
rectangle(x1,y1,x2,y2);
setcolor(WHITE);
outtextxy(x1+dx+10,y1+dy-10,"Translated");
rectangle(x1+dx,y1+dy,x2+dx,y2+dx);
}
void rotate(int x1,int y1,int x2, int y2,int color) {
double angle;
22
getch();
closegraph();
}
24
OUTPUT
25
26
27
PROGRAM 8
WINDOW TO VIEW
PORT MAPPING
SOURCE
#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]);
28
}
sx=((xvmax-xvmin)/(xwmax-xwmin));
sy=((yvmax-yvmin)/(ywmax-xwmin));
initgraph(&gd,&gm," ");
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();
}
29
OUTPUT
30
PROGRAM 9
IMPLEMENTATION
OF COHEN
SUTHERLAND
ALGORITHM
SOURCE
#include <stdio.h>
#include <graphics.h>
#include <conio.h>
#include <math.h>
#define TRUE 1
#define FALSE 0
typedef unsigned int outcode;
outcode CompOutCode(float x,float y);
enum { TOP = 0x1,BOTTOM = 0x2,RIGHT = 0x4,LEFT = 0x8};
float xmin,xmax,ymin,ymax;
void clip(float x0,float y0,float x1,float y1){
outcode outcode0,outcode1,outcodeOut;
int accept = FALSE,done = FALSE;
outcode0 = CompOutCode(x0,y0);
outcode1 = CompOutCode(x1,y1);
31
do{
if(!(outcode0|outcode1))
{
accept = TRUE;
done = TRUE;
}
else if(outcode0 & outcode1)
done = TRUE;
else{
float x,y;
outcodeOut = outcode0?outcode0:outcode1;
if(outcodeOut & TOP)
{x = x0+(x1-x0)*(ymax-y0)/(y1-y0);
y = ymax;}
else if(outcodeOut & BOTTOM)
{x = x0+(x1-x0)*(ymin-y0)/(y1-y0);
y = ymin;}
else if(outcodeOut & RIGHT)
{y = y0+(y1-y0)*(xmax-x0)/(x1-x0);
x = xmax;}
else
{y = y0+(y1-y0)*(xmin-x0)/(x1-x0);
x = xmin;}
if(outcodeOut==outcode0)
{x0 = x;
y0 = y;
outcode0 = CompOutCode(x0,y0);}
else{
x1 = x;
y1 = y;
outcode1 = CompOutCode(x1,y1);}
}}
while(done==FALSE);
if(accept)
line(x0,y0,x1,y1);
outtextxy(200,20,"LINE AFTER CLIPPING");
rectangle(xmin,ymin,xmax,ymax);}
outcode CompOutCode(float x,float y)
{outcode code = 0;
32
if(y>ymax)
code|=TOP;
else if(y<ymin)
code|=BOTTOM;
if(x>xmax)
code|=RIGHT;
else if(x<xmin)
code|=LEFT;
return code;}
void main( )
{
float x1,y1,x2,y2;
int gdriver = DETECT, gmode ;
printf("\nEnter the endpoints of line\n");
scanf("%f%f%f%f",&x1,&y1,&x2,&y2);
printf("Enter the rectangular coordinates of clipping window\n");
scanf("%f%f%f%f",&xmin,&ymin,&xmax,&ymax);
/* initialize graphics and local variables */
initgraph(&gdriver, &gmode, "c:\\tc\\bgi");
outtextxy(200,20,"LINE BEFORE CLIPPING");
line(x1,y1,x2,y2);
rectangle(xmin,ymin,xmax,ymax);
getch( );
cleardevice( );
clip(x1,y1,x2,y2);
getch( );
restorecrtmode( );
}
33
OUTPUT
34
***
35