0% found this document useful (0 votes)
52 views

Maharishi Markandeshwar University, Sadopur, Ambala Date: Program No.: 1 Aim: Write A Program To Implement DDA Line Drawing Algorithm

The document contains programs implementing various computer graphics algorithms: 1. DDA line drawing algorithm 2. Bresenham's line drawing algorithm 3. Bresenham's circle drawing algorithm 4. Drawing a decagon with each vertex connected 5. Boundary fill algorithm 6. Cohen-Sutherland line clipping algorithm 7. 2D transformations - translation, scaling, and rotation 8. Drawing Bezier curves given a set of control points 9. Scan line polygon filling algorithm The programs demonstrate how to implement these common computer graphics algorithms in C programming language.

Uploaded by

Golu
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
52 views

Maharishi Markandeshwar University, Sadopur, Ambala Date: Program No.: 1 Aim: Write A Program To Implement DDA Line Drawing Algorithm

The document contains programs implementing various computer graphics algorithms: 1. DDA line drawing algorithm 2. Bresenham's line drawing algorithm 3. Bresenham's circle drawing algorithm 4. Drawing a decagon with each vertex connected 5. Boundary fill algorithm 6. Cohen-Sutherland line clipping algorithm 7. 2D transformations - translation, scaling, and rotation 8. Drawing Bezier curves given a set of control points 9. Scan line polygon filling algorithm The programs demonstrate how to implement these common computer graphics algorithms in C programming language.

Uploaded by

Golu
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 21

Maharishi Markandeshwar University, Sadopur, Ambala

Date :
Program No. : 1
Aim : Write a program to implement DDA line drawing algorithm.
#include<stdio.h>
#include<conio.h>
#include<graphics.h>
void main()
{
int x,y,x1,x2,y1,y2,k,dx,dy,s,xi,yi;
int gdriver=DETECT,gmode;
initgraph(&gdriver,&gmode,":");
printf("Enter First Point : ");
scanf("%d%d",&x1,&y1);
printf("Enter Second Point : ");
scanf("%d%d",&x2,&y2);
x=x1;
y=y1;
putpixel(x,y,6);
dx=x2-x1;
dy=y2-y1;
if(abs(dx)>abs(dy))
s=abs(dx);
else
s=abs(dy);
xi=dx/s;
yi=dy/s;
putpixel(x,y,7);
for(k=0;k<s;k++)
{
x=x+xi;
y=y+yi;
putpixel(x,y,7);
}
getch();
closegraph();
}

Maharishi Markandeshwar University, Sadopur, Ambala


Date :
Output :

Program No. : 2
Aim : Write a program to implement Bresenhams line drawing algorithm.
#include<graphics.h>
#include<stdio.h>
#include<conio.h>
void main()
{
int x,y,x1,y1,x2,y2,dx,dy,p;
int gdriver=DETECT,gmode;
initgraph(&gdriver,&gmode,"C:\\TC\\BGI");
printf("Enter values of x1 and y1: ");
scanf("%d %d",&x1,&y1);
printf("Enter values of x2 and y2 : ");
scanf("%d %d",&x2,&y2);
dx=x2-x1;
dy=y2-y1;
p = 2 * (dy) - (dx);
x=x1;
y=y1;
putpixel(x,y,WHITE);
while(x<=x2)
{
if(p<0)
p=p+(2*dy);
else
{
p=p+(2*dy)-(2*dx);
y++;
}
x++;
putpixel(x,y,WHITE);
}
getch();
}

Maharishi Markandeshwar University, Sadopur, Ambala


Date :
Output :

Maharishi Markandeshwar University, Sadopur, Ambala


Date :
Program No. : 3
Aim : Write a program to implement the Bresenhams circle drawing algorithm.
#include<stdio.h>
#include<conio.h>
#include<graphics.h>
void circlepoints(int,int);
void main()
{
int x,y,p,r;
int gdriver=DETECT,gmode;
initgraph(&gdriver,&gmode,"C:\\tc\\bgi:");
clrscr();
printf("enter the radius");
scanf("%d",&r);
x=0;y=r;p=1-r;
while(x<y)
{
x++;
if(p>0)
{
p=p+2*(x-y)+1;
y--;
}
else
p=p+2*x+1;
circlepoints(x,y);
}
getch();
closegraph();
}
void circlepoints(int x,int y)
{
putpixel(x+300,y+300,8);
putpixel(x+300,-y+300,8);
putpixel(-x+300,y+300,8);
putpixel(-x+300,-y+300,8);
putpixel(y+300,x+300,8);
putpixel(y+300,-x+300,8);
putpixel(-y+300,x+300,8);
putpixel(-y+300,-x+300,8);
}

Maharishi Markandeshwar University, Sadopur, Ambala


Date :
Output :

Maharishi Markandeshwar University, Sadopur, Ambala


Date :
Program No. : 4
Aim : Write a program to implement decagon whose each vertex is connected.
#include<graphics.h>
#include<stdio.h>
#include<conio.h>
void ecagon(const int, const int []);
void main()
{
int decagonpoints[12] = {400,360,365,325,400,290,485, 325,450,360,400,360};
int gdriver= DETECT, gmode;
initgraph(&gdriver,&gmode,":");
setbkcolor(WHITE);
setcolor(RED);
ecagon (6,decagonpoints);
getch();
}
void ecagon( const int n, const int cdr [] )
{
int c,i ;
if(n>=2)
{
for(c=0; c< (n-1); c++)
{
for(i=0; i<=(n-2) && (c<=2); i=i+2)
line(cdr [ (c*2)], cdr [(c*2)+1], cdr [((c+1)*2)+i],
cdr[((( c+1)*2)+1)+i]);
if(c>2)
line(cdr[(c*2)],cdr[(c*2)+1], cdr[((c+1)*2)],cdr[((( c+1)*2)+1)]);
}
}
}

Output :

Maharishi Markandeshwar University, Sadopur, Ambala


Date :
Program No. : 5
Aim : Write a program to implement Boundary fill. algorithm.
#include<graphics.h>
#include<stdio.h>
#include<conio.h>
#include<math.h>
void boundary(const int,const int,const int,const int);
void polygon(const int,const int[]);
void main()
{
int t=7;
int polygon_points[14]={365,325,400,290,450,290,485,325,450,360,400,360,365,325};
int driver= DETECT, mode;
initgraph(&driver,&mode,"d:\\tc\\bgi");
setcolor(10);
polygon(t,polygon_points);
boundary(425,325,15,10);
getch();
closegraph();
}
void boundary(const int x,const int y,const int fill_color,const int boundary_color)
{
if(getpixel(x,y)!=boundary_color && getpixel(x,y)!=fill_color)
{
putpixel(x,y,fill_color);
boundary((x+1),y,fill_color,boundary_color);
boundary((x-1),y,fill_color,boundary_color);
boundary(x,(y+1),fill_color,boundary_color);
boundary(x,(y-1),fill_color,boundary_color);
}
}
void polygon(const int n,const int cdr[])
{
int count;
if (n>=2)
{
line(cdr[0],cdr[1],cdr[2],cdr[3]);
for(count=1;count<(n-1);count++)
line(cdr[(count*2)],cdr[(count*2)+1],cdr[((count+1)*2)],cdr[(((count+1)*2)+1)]);
}
}

Output :

Maharishi Markandeshwar University, Sadopur, Ambala


Date :
Program No. : 6
Aim : Write a program to implement Cohen Sutherland line clipping algorithm.
#include<stdio.h>
#include<conio.h>
#include<graphics.h>
void main()
{
int gd=DETECT, gm;
float i,xmax,ymax,xmin,ymin,x1,y1,x2,y2,m;
float start[4],end[4],code[4];
clrscr();
initgraph(&gd,&gm,"C:\\TC\\BGI");
printf("Enter the bottom-left coordinate of viewport: ");
scanf("%f%f",&xmin,&ymin);
printf("Enter the top-right coordinate of viewport: ");
scanf("%f%f",&xmax,&ymax);
printf("Enter the coordinates for starting point of line: ");
scanf("%f%f",&x1,&y1);
printf("Enter the coordinates for ending point of line: ");
scanf("%f%f",&x2,&y2);
for(i=0;i<4;i++)
{
start[i]=0;
end[i]=0;
}
m=(y2-y1)/(x2-x1);
if(x1<xmin) start[0]=1;
if(x1>xmax) start[1]=1;
if(y1>ymax) start[2]=1;
if(y1<ymin) start[3]=1;
if(x2<xmin) end[0]=1;
if(x2>xmax) end[1]=1;
if(y2>ymax) end[2]=1;
if(y2<ymin) end[3]=1;
for(i=0;i<4;i++)
code[i]=start[i]&&end[i];
if((code[0]==0)&&(code[1]==0)&&(code[2]==0)&&(code[3]==0))
{
if((start[0]==0)&&(start[1]==0)&&(start[2]==0)&&(start[3]==0)&&(end[0]==0)&&(end[1]
==0)&&(end[2]==0)&&(end[3]==0))
{
cleardevice();
printf("\nThe line is totally visible\nand not a clipping candidate");
rectangle(xmin,ymin,xmax,ymax);
line(x1,y1,x2,y2);
getch();
}
else
{
cleardevice();
printf("\nLine is partially visible");

Maharishi Markandeshwar University, Sadopur, Ambala


Date :
rectangle(xmin,ymin,xmax,ymax);
line(x1,y1,x2,y2);
getch();
if((start[2]==0)&&(start[3]==1))
{
x1=x1+(ymin-y1)/m;
y1=ymin;
}
if((end[2]==0)&&(end[3]==1))
{
x2=x2+(ymin-y2)/m;
y2=ymin;
}
if((start[2]==1)&&(start[3]==0))
{
x1=x1+(ymax-y1)/m;
y1=ymax;
}
if((end[2]==1)&&(end[3]==0))
{
x2=x2+(ymax-y2)/m;
y2=ymax;
}
if((start[1]==0)&&(start[0]==1))
{
y1=y1+m*(xmin-x1);
x1=xmin;
}
if((end[1]==0)&&(end[0]==1))
{
y2=y2+m*(xmin-x2);
x2=xmin;
}
if((start[1]==1)&&(start[0]==0))
{
y1=y1+m*(xmax-x1);
x1=xmax;
}
if((end[1]==1)&&(end[0]==0))
{
y2=y2+m*(xmax-x2);
x2=xmax;
}
clrscr();
cleardevice();
printf("\nAfter clippling:");
rectangle(xmin,ymin,xmax,ymax);
line(x1,y1,x2,y2);
getch();
}
}
else
{
clrscr();

Maharishi Markandeshwar University, Sadopur, Ambala


Date :
cleardevice();
printf("\nLine is invisible");
rectangle(xmin,ymin,xmax,ymax);
}
getch();
closegraph();
}

Output :

10

Maharishi Markandeshwar University, Sadopur, Ambala


Date :

11

Maharishi Markandeshwar University, Sadopur, Ambala


Date :
Program No. : 7
Aim : Write a program to implement 2d transformation:
1) Transformation

2) Scaling

3) Rotation

#include<stdio.h>
#include<conio.h>
#include<graphics.h>
#include<math.h>
void translate(int,int);
void scale(float,float);
void rotate(float);
void main()
{
int ch;
int gd=DETECT,gm;
int tx,ty;
float sx,sy;
float theta;
initgraph(&gd,&gm,"c:\\tc\\bgi");
outtextxy(20,100,"Object.");
outtextxy(20,110,"-------");
rectangle(100,250,150,200);
printf("---MENU---");
printf("\n 1)Translate\n 2)Scale\n 3)Rotate");
printf("\nEnter your choice: ");
scanf("%d",&ch);
cleardevice();
switch(ch)
{
case 1:
outtextxy(10,45,"Enter value of tx and ty:");
scanf("%d %d",&tx,&ty);
translate(tx,ty);
break;
case 2:
outtextxy(10,45,"Enter the value of sx and sy:");
scanf("%f%f",&sx,&sy);
scale(sx,sy);
break;
case 3:
outtextxy(10,50,"Enter the angle for rotation: ");
scanf("%f",&theta);
rotate(theta);
break;
default:
printf("Invalid choice!!!!");
break;
}
getch();
closegraph();

12

Maharishi Markandeshwar University, Sadopur, Ambala


Date :
}
void translate(int tx,int ty)
{
outtextxy(240,10,"TRANSLATION");
outtextxy(238,20,"------------");
rectangle(100,250,150,200);
rectangle(100+tx,250+ty,150+tx,200+ty);
}
void scale(float sx,float sy)
{
outtextxy(240,10,"SCALING");
outtextxy(238,20,"--------");
rectangle(100,250,150,200);
rectangle(100*sx,250*sy,150*sx,200*sy);
}
void rotate(float theta)
{
int x1,x2,x3,x4;
int y1,y2,y3,y4;
int ax1,ax2,ax3,ax4,ay1,ay2,ay3,ay4;
int refx,refy;
theta=theta*(3.14/180);
outtextxy(240,10,"ROTATE");
outtextxy(238,20,"-------");
refx=100;
refy=100;
x1=100;
y1=100;
x2=150;
y2=100;
x3=150;
y3=150;
x4=100;
y4=150;
ax1=refy+(x1-refx)*cos(theta)-(y1-refy)*sin(theta);
ay1=refy+(x1-refx)*sin(theta)+(y1-refy)*cos(theta);
ax2=refy+(x2-refx)*cos(theta)-(y2-refy)*sin(theta);
ay2=refy+(x2-refx)*sin(theta)+(y2-refy)*cos(theta);
ax3=refy+(x3-refx)*cos(theta)-(y3-refy)*sin(theta);
ay3=refy+(x3-refx)*sin(theta)+(y3-refy)*cos(theta);
ax4=refy+(x4-refx)*cos(theta)-(y4-refy)*sin(theta);
ay4=refy+(x4-refx)*sin(theta)+(y4-refy)*cos(theta);
rectangle(100,150,150,100);
line(ax1,ay1,ax2,ay2);
line(ax2,ay2,ax3,ay3);
line(ax3,ay3,ax4,ay4);
line(ax4,ay4,ax1,ay1);
}

13

Maharishi Markandeshwar University, Sadopur, Ambala


Date :
Output :

14

Maharishi Markandeshwar University, Sadopur, Ambala


Date :

15

Maharishi Markandeshwar University, Sadopur, Ambala


Date :
Program No. : 8
Aim : Write a program to implement Bezier curves for a given set of control points.
#include<stdio.h>
#include<stdlib.h>
#include<graphics.h>
#include<math.h>
void bezier(int x[4],int y[4])
{
int i;
double t;
int gd=DETECT,gm;
initgraph(&gd,&gm,"C:\\TC\\BGI");
setbkcolor(WHITE);
for(t=0.0;t<1.0;t+=0.0005)
{
double xt=pow(1-t,3)*x[0]+3*t*pow(1-t,2)*x[1]+3*pow(t,2)*(1-t)*x[2]+pow(t,3)*x[3];
double yt=pow(1-t,3)*y[0]+3*t*pow(1-t,2)*y[1]+3*pow(t,2)*(1-t)*y[2]+pow(t,3)*y[3];
putpixel(xt,yt,12);
}
for(i=0;i<4;i++)
putpixel(x[i],y[i],BLUE);
getch();
closegraph();
return;
}
void main()
{
int x[4],y[4];
int i;
clrscr();
printf("Enter the x - and y -coordinates of the four control points.\n");
for (i=0;i<4;i++)
scanf("%d%d",&x[i],&y[i]);
bezier(x,y);
}

16

Maharishi Markandeshwar University, Sadopur, Ambala


Date :
Output :

17

Maharishi Markandeshwar University, Sadopur, Ambala


Date :
Program No. : 9
Aim : Write a program to implement Scan Line Polygon Filling Algorithm.
#include<stdio.h>
#include<conio.h>
#include<graphics.h>
main()
{
int n,i,j,k,gd,gm,dy,dx;
int x,y,temp;
int a[20][2],xi[20];
float slope[20];
clrscr();
printf("\nEnter the no. of edges of polygon : ");
scanf("%d",&n);
printf("\nEnter the cordinates of polygon :\n");
for(i=0;i<n;i++)
{
printf("X%d Y%d : ",i,i);
scanf("%d %d",&a[i][0],&a[i][1]);
}
a[n][0]=a[0][0];
a[n][1]=a[0][1];
detectgraph(&gd,&gm);
initgraph(&gd,&gm,"c:\\tc\\bgi");
for(i=0;i<n;i++)
{
line(a[i][0],a[i][1],a[i+1][0],a[i+1][1]);
}
getch();
for(i=0;i<n;i++)
{
dy=a[i+1][1]-a[i][1];
dx=a[i+1][0]-a[i][0];
if(dy==0) slope[i]=1.0;
if(dx==0) slope[i]=0.0;
if((dy!=0)&&(dx!=0))
{
slope[i]=(float) dx/dy;
}
}
for(y=0;y< 480;y++)
{
k=0;
for(i=0;i<n;i++)
{
if( ((a[i][1]<=y)&&(a[i+1][1]>y))||((a[i][1]>y)&&(a[i+1][1]<=y)))
{
xi[k]=(int)(a[i][0]+slope[i]*(y-a[i][1]));
k++;
}
}
for(j=0;j<k-1;j++)

18

Maharishi Markandeshwar University, Sadopur, Ambala


Date :
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(30);
for(i=0;i<k;i+=2)
{
line(xi[i],y,xi[i+1]+1,y);
delay(20);
}
}
}

Output :

19

Maharishi Markandeshwar University, Sadopur, Ambala


Date :

20

Maharishi Markandeshwar University, Sadopur, Ambala


Date :

21

You might also like