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

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 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