Вы находитесь на странице: 1из 19

INDEX

1. program implenting DDA algorithm for drawing a line

2. program implenting Bresenham's line algorithm

3. program implenting mid point algorithm for drawing a


circle
4. program of line and triangle translation

5. program for graphics scaling

6. program for line and triangle rotation

7. program implenting Cohen-Sutherland line clipping


algorithm

8. program implenting bezier curve

9. program to implement Bspline curve


1) program implenting DDA algorithm for drawing a line

#include<iostream.h>
#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>

void lineDDA(int,int,int,int);
void main()
{
int xa=0,ya=0,xb=0,yb=0;

cout<<"enter the co-ordinates of points\n";


cin>>xa>>ya>>xb>>yb;

int gdriver = DETECT, gmode;


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

lineDDA(xa,ya,xb,yb);
getch(); closegraph();
}

void lineDDA(int xa,int ya,int xb,int yb)


{
int dx,dy,steps,x,y,xi,yi;

dx=xb-xa; dy=yb-ya;

if(dx>dy) steps=dx;
else steps=dy;

xi=dx/steps; yi=dy/steps;
x=xa; y=ya; putpixel(x,y,5);

for(int k=1;k<=steps;k++)
{
x=x+xi; y=y+yi; putpixel(x,y,5);
}
}
2) program implenting Bresenham's line algorithm

#include<iostream.h>
#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>

void lineBRESEN(int,int,int,int);
void main()
{
int xa=0,ya=0,xb=0,yb=0;

cout<<"enter the co-ordinates of points/n";


cin>>xa>>ya>>xb>>yb;

int gdriver = DETECT, gmode;


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

if(xa<xb)
lineBRESEN(xa,ya,xb,yb);
else
lineBRESEN(xb,yb,xa,ya);
getch();
closegraph();
}

void lineBRESEN(int xa,int ya,int xb,int yb)


{
int dx,dy,x=xa,y=ya;
putpixel(xa,ya,5);

dx=xb-xa; dy=yb-ya;
int p=2*dy-dx;

while(y<yb||x<xb)
{
if(p<0)
{
x+=1; putpixel(x,y,5); p+=2*dy;
}
else
{
x+=1;y+=1; putpixel(x,y,5); p+=2*(dy-dx);
}
}
}

3) program implenting mid point algorithm for drawing a


circle

#include<iostream.h>
#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>

void circleMID(int,int,int);
void cpixel1(int,int,int,int);
void main()

{
int xa=0,ya=0,r=0;

cout<<"enter the co-ordinates of center\n";


cin>>xa>>ya;
cout<<"\nenter radius\n";
cin>>r;

int gdriver = DETECT, gmode;

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


setbkcolor(2);

circleMID(xa,ya,r);

getch();
closegraph();
getch();
}
void cpixel1(int x,int y,int xa,int ya)
{

putpixel(x+xa,y+ya,5);
putpixel(x+xa,-y+ya,5);
putpixel(-x+xa,y+ya,5);
putpixel(-x+xa,-y+ya,5);
putpixel(y+xa,x+ya,5);
putpixel(y+xa,-x+ya,5);
putpixel(-y+xa,x+ya,5);
putpixel(-y+xa,-x+ya,5);
}

void circleMID(int xa,int ya,int r)


{
int x=xa,y=ya+r;

cpixel1(x,y,xa,ya);

int p=1-r;

while(y>x)
{
if(p<0)
{
x+=1;

cpixel1(x,y,xa,ya);

p+=2*x+1;
}
else
{
x+=1;y-=1;
cpixel1(x,y,xa,ya);
p+=2*x+1-2*y;
}
}
}

4) program of line and triangle translation

#include<iostream.h>
#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>

void lineT(int,int,int,int,int,int);
void triangleT(int,int,int,int,int,int,int,int);
void main()

{
int xa=0,ya=0,xb=0,yb=0,xc=0,yc=0,tx=0,ty=0,op;
cout<<"select option for translation";
cout<<"\n1 :line\t2 :triangle\n";
cin>>op;

if(op==1)
{
cout<<"enter the co-ordinates of line\n";
cin>>xa>>ya>>xb>>yb;
cout<<"enter translation units";
cin>>tx>>ty;
}
else if(op==2)
{
cout<<"enter the co-ordinates of triangle\n";
cin>>xa>>ya>>xb>>yb>>xc>>yc;
cout<<"enter translation units";
cin>>tx>>ty;
}
else
{
cout<<"wrong input\npress any key to terminate";
getch();
exit(0);
}
int gdriver = DETECT, gmode;
initgraph(&gdriver, &gmode, "c:\\tc\\bgi");
setbkcolor(2);
setcolor(5);

if(op==1)
lineT(xa,ya,xb,yb,tx,ty);
else if(op==2)
triangleT(xa,ya,xb,yb,xc,yc,tx,ty);

getch();
closegraph();
getch();
}

void lineT(int xa,int ya,int xb,int yb,int tx,int ty)


{
setlinestyle(DOTTED_LINE,1,1);
line(xa,ya,xb,yb);

setlinestyle(SOLID_LINE,1,1);
line(xa+tx,ya+ty,xb+tx,yb+ty);
}
void triagleT(int xa,int ya,int xb,int yb,int xc,int yc,int tx,int ty)
{
setlinestyle(DOTTED_LINE,1,1);
line(xa,ya,xb,yb);
line(xb,yb,xc,yc);
line(xc,yc,xa,ya);

setlinestyle(SOLID_LINE,1,1);
line(xa+tx,ya+ty,xb+tx,yb+ty);
line(xb+tx,yb+ty,xc+tx,yc+ty);
line(xc+tx,yc+ty,xa+tx,ya+ty);

}
5) program for graphics scaling

#include<iostream.h>
#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>

void lineT(int,int,int,int,int,int);
void triangleT(int,int,int,int,int,int,int,int);
void main()

{
int xa=0,ya=0,xb=0,yb=0,xc=0,yc=0,tx=0,ty=0,op;
cout<<"select option for scalling transformation";
cout<<"\n1 :line\t2 :triangle\n";
cin>>op;

if(op==1)
{
cout<<"enter the co-ordinates of line\n";
cin>>xa>>ya>>xb>>yb;
cout<<"enter scaling factor";
cin>>tx>>ty;
}
else if(op==2)
{
cout<<"enter the co-ordinates of triangle\n";
cin>>xa>>ya>>xb>>yb>>xc>>yc;
cout<<"enter scalling factor";
cin>>tx>>ty;
}
else
{
cout<<"wrong input\npress any key to terminate";
getch();
exit(0);
}
int gdriver = DETECT, gmode;

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


setbkcolor(2);
setcolor(5);

if(op==1)
lineT(xa,ya,xb,yb,tx,ty);
else if(op==2)
triangleT(xa,ya,xb,yb,xc,yc,tx,ty);

getch();
closegraph();
getch();
}

void lineT(int xa,int ya,int xb,int yb,int tx,int ty)


{
setlinestyle(DOTTED_LINE,1,1);
line(xa,ya,xb,yb);

setlinestyle(SOLID_LINE,1,1);
line(xa*tx,ya*ty,xb*tx,yb*ty);
}
void triagleT(int xa,int ya,int xb,int yb,int xc,int yc,int tx,int ty)
{
setlinestyle(DOTTED_LINE,1,1);
line(xa,ya,xb,yb);
line(xb,yb,xc,yc);
line(xc,yc,xa,ya);

setlinestyle(SOLID_LINE,1,1);
line(xa*tx,ya*ty,xb*tx,yb*ty);
line(xb*tx,yb*ty,xc*tx,yc*ty);
line(xc*tx,yc*ty,xa*tx,ya*ty);

}
6) program for line and triangle rotation

#include<iostream.h>
#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include<math.h>

void lineT(int,int,int,int,int);
void triangleT(int,int,int,int,int,int,int);
void main()

{
int xa=0,ya=0,xb=0,yb=0,xc=0,yc=0,tx=0,op;
cout<<"select option for rotation";
cout<<"\n1 :line\t2 :triangle\n";
cin>>op;

if(op==1)
{
cout<<"enter the co-ordinates of line\n";
cin>>xa>>ya>>xb>>yb;
cout<<"enter rotation angle";
cin>>tx;
}
else if(op==2)
{
cout<<"enter the co-ordinates of triangle\n";
cin>>xa>>ya>>xb>>yb>>xc>>yc;
cout<<"enter rotation angle";
cin>>tx;
}
else
{
cout<<"wrong input\npress any key to terminate";
getch();
exit(0);
}
int gdriver = DETECT, gmode;

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


setbkcolor(2);
setcolor(5);

if(op==1)
lineT(xa,ya,xb,yb,tx);
else if(op==2)
triangleT(xa,ya,xb,yb,xc,yc,tx);

getch();
closegraph();
getch();
}

void lineT(int xa,int ya,int xb,int yb,int tx)


{
setlinestyle(DOTTED_LINE,1,1);
line(xa,ya,xb,yb);

int xa1=double(xa*cos(tx)-ya*sin(tx));
int ya1=double(xa*sin(tx)+ya*cos(tx));
int xb1=double(xb*cos(tx)-yb*sin(tx));
int yb1=double(xb*sin(tx)+yb*cos(tx));

setlinestyle(SOLID_LINE,1,1);
line(xa1,ya1,xb1,yb1);
}
void triagleT(int xa,int ya,int xb,int yb,int xc,int yc,int tx)
{
setlinestyle(DOTTED_LINE,1,1);
line(xa,ya,xb,yb);
line(xb,yb,xc,yc);
line(xc,yc,xa,ya);

int xa1=double(xa*cos(tx)-ya*sin(tx));
int ya1=double(xa*sin(tx)+ya*cos(tx));
int xb1=double(xb*cos(tx)-yb*sin(tx));
int yb1=double(xb*sin(tx)+yb*cos(tx));
int xc1=double(xc*cos(tx)-yc*sin(tx));
int yc1=double(xc*sin(tx)+yc*cos(tx));

setlinestyle(SOLID_LINE,1,1);
line(xa1,ya1,xb1,yb1);
line(xb1,yb1,xc1,yc1);
line(xc1,yc1,xa1,ya1);

7) program implenting Cohen-Sutherland line clipping


algorithm

#include<iostream.h>
#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include<string.h>
#include<dos.h>

void main()
{
int xa=0,ya=0,xb=0,yb=0,px1,py1,px2,py2;
int opc,opc2,tpx1,tpx2,tpy1,tpy2,x,x1,y,y1;

cout<<"enter the co-ordinates of line\n";


cin>>xa>>ya>>xb>>yb;

cout<<"\nenter windows' left-bottom corner points' x y cordinates\n";


cin>>px1>>py1;
cout<<"\nenter windows' right-top corner points' x y cordinates\n";
cin>>px2>>py2;

//opcode of point 1
if(xa>px1&&xa<px2&&ya>py1&&ya<py2)
opc=0000;

else if(xa>px2&&ya>py1&&ya<py2)
opc=0010;

else if(xa<px1&&ya>py1&&ya<py2)
opc=0001;

else if(xa<px1&&ya<py1)
opc=0101;

else if(xa>px1&&xa<px2&&ya<py1)
opc=0100;

else if(xa<px2&&ya<py1)
opc=0110;

else if(xa<px1&&ya>py2)
opc=1001;

else if(xa>px1&&xa<px2&&ya>py2)
opc=1000;

else if(xa>px2&&ya>py2)
opc=1010;

//opcode of point 2

if(xb>px1&&xb<px2&&yb>py1&&yb<py2)
opc2=0000;

else if(xb>px2&&yb>py1&&yb<py2)
opc2=0010;

else if(xb<px1&&yb>py1&&yb<py2)
opc2=0001;

else if(xb<px1&&yb<py1)
opc2=0101;
else if(xb>px1&&xb<px2&&yb<py1)
opc2=0100;

else if(xb<px2&&yb<py1)
opc2=0110;

else if(xb<px1&&yb>py2)
opc2=1001;

else if(xb>px1&&xb<px2&&yb>py2)
opc2=1000;

else if(xb>px2&&yb>py2)
opc2=1010;

if(opc==0&&opc2==0)
cout<<"\nline is completely visible\n";

else if((opc==0100||opc==0110||opc==0101)&&(opc2==0100||
opc2==0110||opc2==0101))
cout<<"\nline is invisible\n";

else if((opc==1000||opc==1010||opc==1001)&&(opc2==1000||
opc2==1010||opc2==1001))
cout<<"\nline is invisible\n";

else if((opc==0110||opc==1010||opc==0010)&&(opc2==0110||
opc2==1010||opc2==0010))
cout<<"\nline is invisible\n";

else if((opc==0101||opc==1001||opc==0001)&&(opc2==0101||
opc2==1001||opc2==0001))
cout<<"\nline is invisible\n";

else
cout<<"line is partial visible";

x1=px1;
y=((yb-ya)/(xb-xa))*(x1-xa)+ya;
if((y<ya&&y<yb)||(y>ya&&y>yb))
{
x1=px2;
y=((yb-ya)/(xb-xa))*(x1-xa)+ya;
}
tpx1=x1;tpy1=y;

y1=py1;
x=((xb-xa)/(yb-ya))*(y1-ya)+xa;

if((x<xa&&x<xb)||(x>xa&&x>xb))
{
y1=py2;
x=((xb-xa)/(yb-ya))*(y1-ya)+xa;
}

tpx2=x;tpy2=y1;

cout<<"partial visible part is between following points:-\n\t(";


cout<<tpx1<<","<<tpy1<<"), ("<<tpx2<<","<<tpy2<<")\n";

delay(5000);

int gdriver = DETECT, gmode;


initgraph(&gdriver, &gmode, "c:\\tc\\bgi");
setbkcolor(2);
setcolor(5);

rectangle(xa,yb,xb,ya);
setcolor(7);
line(xa,ya,xb,yb);

getch();
closegraph();

8) program to implement Bspline curve


#include<graphics.h>
#include<conio.h>
void Bspline(int a[],int b[])
{
float x0,x1,x2,x3,y0,y1,y2,y3,x[10],y[10];
int k,xx,yy;
float i,dt,t,n=10000;
/*setbkcolor(BLUE);*/
setcolor(RED);
dt=1/n;
for(i=0;i<10;i++)
{
x[i]=a[i];
y[i]=b[i];
}
for(k=0;k<10;k++)
{
if(k==0) moveto(x[k],y[k]);
lineto(x[k],y[k]);
}
for(k=0;k<7;k++)
{
x0=x[k]; y0=y[k];
x1=x[k+1];y1=y[k+1];
x2=x[k+2];y2=y[k+2];
x3=x[k+3];y3=y[k+3];
for(i=0;i<=n;i++)
{
setcolor(GREEN);
t=i*dt;
xx=((-t*t*t+3*t*t-3*t+1)/6)*x0+((3*t*t*t-6*t*t+4)/6)*x1+((-
3*t*t*t+3*t*t+3*t+1)/6)*x2+(t*t*t/6)*x3;
yy=((-t*t*t+3*t*t-3*t+1)/6)*y0+((3*t*t*t-6*t*t+4)/6)*y1+((-
3*t*t*t+3*t*t+3*t+1)/6)*y2+(t*t*t/6)*y3;
if(i==0) moveto(xx,yy);
lineto(xx,yy);

}
}
void main()
{
int gdriver=DETECT,gmode,i;
int a[10]={50,80,100,150,200,250,300,340,380,450};
int b[10]={100,50,60,120,140,50,60,160,150,100};
initgraph(&gdriver,&gmode,"c:\\tc\\bgi");
cleardevice();
Bspline(a,b);
for(i=0;i<=9;i++)
putpixel(a[i],b[i],15);
getch();
closegraph();
}

9) program implenting bezier curve

#include<stdio.h>
#include<graphics.h>
#include<conio.h>
void bezier(float u,int n,int p[4][3]);
float c(int,int);

int x,y,z;
void main()
{
float u;
int gd,gm,ymax,i,n,c[4][3];

for(i=0;i<4;i++)
{
c[i][0]=0; c[i][1]=0;
}
printf("\n\n enter four points : \n\n");
for(i=0; i<4; i++)
{
printf("\t x%dy%d: ",i,i);
scanf("%d %d",&c[i][0],&c[i][1]);
}
c[4][0]=c[0][0];
c[4][1]=c[0][1];
detectgraph(&gd,&gm);

initgraph(&gd,&gm,"c:\\tc\\bgi");
ymax = 480;
setcolor(35);
for(i=0;i<3;i++)
{
line(c[i][0],ymax-c[i][1],c[i+1][0],ymax-c[i+1][1]);
}setcolor(63);
n=3;
for(i=0;i<=40;i++)

{
u=(float)i/40.0;
bezier(u,n,c);
if(i==0)
{ moveto(x,ymax-y);}
else
{ lineto(x,ymax-y); }
getch();
}getch();getch();
}

void bezier(float u,int n,int p[4][3])


{
int j;
float v,b;
float blend(int,int,float);
x=0;y=0;z=0;
for(j=0;j<=n;j++)
{

b=blend(j,n,u);
x=x+(p[j][0]*b);
y=y+(p[j][1]*b);
z=z+(p[j][2]*b);
}
}
float blend(int j,int n,float u)

{
int k;
float v,blend;
v=c(n,j);
for(k=0;k<j;k++)
{ v*=u; }
for(k=1;k<=(n-j);k++)
{ v *= (1-u); }
blend=v;
return(blend);
}

float c(int n,int j)

{
int k,a,c;
a=1;
for(k=j+1;k<=n;k++)
{ a*=k; }
for(k=1;k<=(n-j);k++)

{ a=a/k; }
c=a;
return(c);
}

Вам также может понравиться