PROGRAM -1
/*Write a program to implement DDA Line 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 gd=DETECT,gm;
initgraph(&gd,&gm,"");
printf("Enter the First point");
scanf("%d%d",&x1,&y1);
printf("Enter Second point");
scanf("%d%d",&x2,&y2);
x=x1;
y=y1;
putpixel(x,y,7);
dx=x2-x1;
dy=y2-y1;
if((dx)>(dy))
s=(dx);
else
s=(dy);
xi=dx/s;
yi=dy/s;
x=x1;
y=y1;
putpixel(x,y,7);
for(k=0;k<30;k++)
{
x=x+xi;
y=y+yi;
putpixel(x,y,7);
}
getch();
closegraph();
}
Output:-
PROGRAM-2
/*/*Write a program to implement BRESENHAM Line Algorithm.*/
#include<stdio.h>
#include<conio.h>
#include<graphics.h>
void main()
{
int gd=DETECT,gm;
int dx,dy,p,end;
int x1,x2,x,y,y1,y2;
clrscr();
initgraph(&gd,&gm,"");
printf("enter the value of x1");
scanf("%d",&x1);
printf("enter the value of y1");
scanf("%d",&y1);
printf("enter the value of x2");
scanf("%d",&x2);
printf("enter the value of y2");
scanf("%d",&y2);
dx=abs(x1-x2);
dy=abs(y1-y2);
p=2*dy-dx;
if(x1>x2)
{
x=x2;
y=y2;
end=x1;
}
else
{
x=x1;
y=y1;
end=x2;
}
putpixel(x,y,RED);
while(x<end)
{
x=x+1;
if(p<0)
{
p=p+2*dy;
}
else
{
y=y+1;
p=p+2*(dy-dx);
}
putpixel(x,y,RED);
}
getch();
closegraph();
}
Output:
PROGRAM -3
/*/*Write a program to implement BRESENHAM Circle Algorithm.*/
#include<stdio.h>
#include<conio.h>
#include<graphics.h>
#include<math.h>
void main()
{
int gd=DETECT,gm;
int r,x,y,p,xc=320,yc=240;
initgraph(&gd,&gm,"C:\\TC\\BGI");
cleardevice();
printf("Enter the radius ");
scanf("%d",&r);
x=0;
y=r;
putpixel(xc+x,yc-y,1);
p=3-(2*r);
for(x=0;x<=y;x++)
{
if (p<0)
{
y=y;
p=(p+(4*x)+6);
}
else
{
y=y-1;
p=p+((4*(x-y)+10));
}
putpixel(xc+x,yc-y,WHITE);
putpixel(xc-x,yc-y,WHITE);
putpixel(xc+x,yc+y,WHITE);
putpixel(xc-x,yc+y,WHITE);
putpixel(xc+y,yc-x,WHITE);
putpixel(xc-y,yc-x,WHITE);
putpixel(xc+y,yc+x,WHITE);
putpixel(xc-y,yc+x,WHITE);
}
getch();
closegraph();
}
Output:-
PROGRAM-4
/*Write a program to implement mid point circle algorithm.*/
#include<stdio.h>
#include<conio.h>
#include<graphics.h>
void Drawcircle(int,int,int);
void Cliplot(int,int,int,int);
int x,y,r,p;
void main()
{
int gd=DETECT,gm;
clrscr();
printf("enter the mid point & radius");
scanf("%d%d%d",&x,&y,&r);
initgraph(&gd,&gm,"");
Drawcircle(x,y,r);
getch();
closegraph();
}
void Drawcircle(int x1,int y1,int r)
{
int x=0,y=r,p=1-r;
Cliplot(x1,y1,x,y);
while(x<y)
{
x++;
if(p<0)
p+=2*x+1;
else
{
y--;
p+=2*(x-y)+1;
}
Cliplot(x1,y1,x,y);
}
}
void Cliplot(int xctr,int yctr,int x,int y)
{
putpixel(xctr+x,yctr+y,1);
putpixel(xctr-x,yctr+y,1);
putpixel(xctr+x,yctr-y,1);
putpixel(xctr-x,yctr-y,1);
putpixel(xctr+y,yctr+x,1);
putpixel(xctr-y,yctr+x,1);
putpixel(xctr+y,yctr-x,1);
putpixel(xctr-y,yctr-x,1);
}
Output:
EXPERIMENT- 5
/*Write a program for line clipping.*/
#include<stdio.h>
#include<graphics.h>
#include<conio.h>
typedef unsigned int outcode;
enum { TOP=0x1, BOTTOM=0x2, RIGHT=0x4, LEFT=0x8 };
void lineclip(x0,y0,x1,y1,xwmin,ywmin,xwmax,ywmax )
float x0,y0,x1,y1,xwmin,ywmin,xwmax,ywmax;
{
int gd,gm;
outcode code0,code1,codeout;
int accept = 0, done=0;
code0 = calcode(x0,y0,xwmin,ywmin,xwmax,ywmax);
code1 = calcode(x1,y1,xwmin,ywmin,xwmax,ywmax);
do{
if(!(code0 | code1))
{ accept =1 ; done =1; }
else
if(code0 & code1) done = 1;
else
{
float x,y;
codeout = code0 ? code0 : code1;
if(codeout & TOP)
{
x = x0 + (x1-x0)*(ywmax-y0)/(y1-y0);
y = ywmax;
}
else
if( codeout & BOTTOM)
{
x = x0 + (x1-x0)*(ywmin-y0)/(y1-y0);
y = ywmin;
}
else
if ( codeout & RIGHT)
{
y = y0+(y1-y0)*(xwmax-x0)/(x1-x0);
x = xwmax;
}
else
{
y = y0 + (y1-y0)*(xwmin-x0)/(x1-x0);
x = xwmin;
}
if( codeout == code0)
{
x0 = x; y0 = y;
code0=calcode(x0,y0,xwmin,ywmin,xwmax,ywmax);
}
else
{
x1 = x; y1 = y;
code1 = calcode(x1,y1,xwmin,ywmin,xwmax,ywmax);
}
}
} while( done == 0);
if(accept) line(x0,y0,x1,y1);
rectangle(xwmin,ywmin,xwmax,ywmax);
getch();
}
int calcode (x,y,xwmin,ywmin,xwmax,ywmax)
float x,y,xwmin,ywmin,xwmax,ywmax;
{
int code =0;
if(y> ywmax)
code |=TOP;
else if( y<ywmin)
code |= BOTTOM;
else if(x > xwmax)
code |= RIGHT;
else if ( x< xwmin)
code |= LEFT;
return(code);
}
main()
{
float x2,y2,x1,y1,xwmin,ywmin,xwmax,ywmax;
int gd=DETECT,gm;
clrscr();
initgraph(&gd,&gm,"e:\\tc\\bgi");
printf("\n\n\tEnter the co-ordinates of Line :");
printf("\n\n\tX1 Y1 : ");
scanf("%f %f",&x1,&y1);
printf("\n\n\tX2 Y2 : ");
scanf("%f %f",&x2,&y2);
printf("\n\tEnter the co_ordinates of window :\n ");
printf("\n\txwmin , ywmin : ");
scanf("%f %f",&xwmin,&ywmin);
printf("\n\txwmax , ywmax : ");
scanf("%f %f",&xwmax,&ywmax);
clrscr();
line(x1,y1,x2,y2);
rectangle(xwmin,ywmin,xwmax,ywmax);
getch();
clrscr();
lineclip(x1,y1,x2,y2,xwmin,ywmin,xwmax,ywmax );
getch();
closegraph();
}
OUTPUT:-
EXPERIMENT- 6
/* Write a program for polygon clipping.*/
#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("\n\n\tEnter the no. of edges of polygon : ");
scanf("%d",&n);
printf("\n\n\tEnter the cordinates of polygon :\n\n\n ");
for(i=0;i<n;i++)
{
printf("\tX%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");
/*- draw polygon -*/
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++)
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(35);
for(i=0;i<k;i+=2)
{
line(xi[i],y,xi[i+1]+1,y);
getch();
}
}}
OUTPUT:-
PROGRAM-7.
/*Write a program to implement polygon clipping. */
#include<stdio.h>
#include<conio.h>
#include<graphics.h>
void storepoints(int,int,int ,int ,int ,int, int[]);
void main()
{
int gd=DETECT,gm;
int x1,x2,y1,y2,xmax,ymax,xmin,ymin;
int a[10],b[10],xa,xb,ya,yb,flag=0;
float m;
int i;
clrscr();
initgraph(&gd,&gm,"");
printf("Enter the x and y coordinate");
scanf("%d%d%d%d",&x1,&x2,&y1,&y2);
printf("Enter the maximum value of x and y");
scanf("%d%d%d%d",&xmax,&ymax,&xmin,&ymin);
storepoints(x2,y2,ymin,ymax,xmin,xmax,b);
for(i=1;i<=4;i++)
{
if(a[i]*b[i]==0)
flag=1;
else flag=0;
}
if(flag==1)
{
m=(y2-y1)/(x2-x1);
xa=x1;
ya=y1;
}
if(a[1]==1)
{
ya=ymax;
xa=x1+((1/m)*(ya-y1));
}
else
{
if(a[2]==1)
{
ya=ymin;
xa=x1+((1/m)*(ya-y1));
}
}
if(a[3]==1)
{
xa=xmax;
ya=y1+(m*(xa-x1));
}
if(a[4]==1)
{
xa=xmin;
ya=y1+(m*(xa-x1));
}
else
if(b[1]==1)
{
yb=ymax;
xb=x2+((1/m)*(yb-y2));
}
else if(b[2]==1)
{
yb=ymin;
xb=x2+((1/m)*(yb-y2));
}
else if(b[3]==1)
{
xb=xmax;
yb=y2+((1/m)*(xb-x2));
}
else if(b[4]==1)
{
xb=xmin;
yb=y2+(m*(xb-x2));
}
rectangle(xmin,ymin,xmax,ymax);
line(x1,y1,x2,y2);
delay(5000);
line(xa,ya,xb,yb);
rectangle(xmin,ymin,xmax,ymax);
if(flag==0)
printf("No clipping");
getch();
closegraph();
}
void storepoints(int x1,int y1,int ymax,int xmax,int ymin,int xmin,int c[10])
{
if((y1-ymax)>0)
c[1]=1;
else
c[1]=0;
if((ymin-y1)>0)
c[2]=1;
else
c[2]=0;
if((x1-xmax)>0)
c[3]=1;
else
c[3]=0;
if((xmin-x1)>0)
c[4]=1;
else
c[4]=0;
}
Output:
EXPERIMENT:-8
/*WAP To rotate a triangle about the origin.*/
#include<iostream.h>
#include<conio.h>
#include<graphics.h>
#include<process.h>
#include<math.h>
voidmain()
{
clrscr();
intgraphdriver=DETECT,graphmode;
initgraph(&graphdriver,&graphmode,"...\\bgi");
intx,y,x1,a[3][3];
doubleb[3][3],c[3][3];
cout<"\nEnter Ist coordinates oftriangle:";
cin>a[0][0]>a[1][0];
cout<"\nEnter 2nd coordinates of triangle:";
cin>a[0][1]>a[1][1];
cout<"\nEnter 3rd coordinates oftriangle:";
cin>a[0][2]>a[1][2];
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][0],a[1][0],a[0][2],a[1][2]); getch();
cleardevice();
cout<"\nEnter angle of rotation:\n";
cin>x;
b[0][0]=b[1][1]=cos((x*3.14)/180); b[0][1]=-sin((x*3.14)/180); b[1][0]=sin((x*3.14)/180); b[2][2]=1; b[2][0]=b[2][1]=b[0][2]=b[1][2]= 0; for(inti=0;i<3;i++)
{
for(intj=0;j<3;j++)
{c[i][j]=0;
for(int k=0; k<3;k++)
{
c[i][j]+=a[i][k]*b[k][j];
} x1=(c[i][j]+0.5); a[i][j]=x1;
}
}
cout<"\n Triangle after rotation is:\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][0],a[1][0],a[0][2],a[1][2]);
getch();
closegraph();
}
OUTPUT:
EXPERIMENT:-9
/*WAP To scale a triangle.*/
#include<iostream.h>
#include<conio.h>
#include<graphics.h>O
voidmain()
{
intgd=DETECT,gm; initgraph(&gd, &gm,""); cleardevice();
intx1,y1,x2,y2,x3,y3,x4,y4;
floatsx,sy;
cout<"Enter the first coordinates of triangle\n";
cin>x1>y1;
cout<"Enterthe second coordinates of triangle\n";
cin>x2>y2;
cout<"Enter the third coordinates of triangle\n";
cin>x3>y3;
intpoly[8]={x1,y1,x2,y2,x3,y3,x1,y1};
cleardevice(); drawpoly(4,poly); getch();
cout<"Enter the scalingfactors\n";
cin>sx>sy; x4=sx*x1-x1; y4=sy*y1-y1;
x1=sx*x1-x4; y1=sy*y1-y4; x2=sx*x2-x4;
y2=sy*y2-y4; x3=sx*x3-x4; y3=sy*y3-y4; poly[0]=x1; poly[1]=y1; poly[2]=x2; poly[3]=y2; poly[4]=x3; poly[5]=y3; poly[6]=x1; poly[7]=y1; getch(); cleardevice(); drawpoly(4,poly); getch(); closegraph();
}
OUTPUT:
EXPERIMENT:-10
/*WAP To Translate a triangle.*/
#include<iostream.h>
#include<conio.h>
#include<graphics.h>
#include<process.h>
#include<math.h>
voidmain()
{
clrscr();
intgraphdriver=DETECT,graphmode;
initgraph(&graphdriver,&graphmode,"...\\bgi");
intx,y,x1,y1,x2,y2,x3,y3;
cout<"\nEnter Ist coordinates oftriangle:";
cin>x1>y1;
cout<"\nEnter 2nd coordinates of triangle:";
cin>x2>y2;
cout<"\nEnter 3rd coordinates oftriangle:";
cin>x3>y3;
cleardevice(); line(x1,y1,x2,y2); line(x2,y2,x3,y3); line(x1,y1,x3,y3); getch(); cleardevice();
cout<"\n Enter translatio factors :\n";
cin>x>y;
x1-=x; y1-=y; x2-=x; y2-=y; x3-=x; y3-=y;
cleardevice(); line(x1,y1,x2,y2); line(x2,y2,x3,y3); line(x1,y1,x3,y3); getch(); closegraph();
}
OUTPUT: