C++ Source Codes
C++ Source Codes
outtextxy(40,30,s);
#include<iostream.h> getch();
#include<graphics.h> }
#include<conio.h> void main()
#include<math.h> {
#include<dos.h> int gd=DETECT,gm,i,j,xx=240,xxx=380;
#include<stdlib.h> clrscr();
#include<stdio.h> lines a;
class lines char *mess[]={"D","D","A","
{ ","A","L","G","O","R","I","T","H","M"};
private: initgraph(&gd,&gm,"..\bgi");
int length,x1,y1,x2,y2,x,y,dx,dy,wx,wy,w,width; cleardevice();
public: rectangle(120,40,320,240);
lines(); //Constructor rectangle(320,40,520,240);
void showline(); rectangle(120,240,320,440);
int sign(int); rectangle(320,240,520,440);
}; for(i=0,j=12;i<8,j>=6;i++,j--)
{
int lines::sign(int xx) xx+=10;
{ outtextxy(xx,10,mess[i]);
if(xx<0) xxx-=10;
return -1; outtextxy(xxx,10,mess[j]);
if(xx==0) delay(100);
return 0; }
if(xx>0) for(i=130;i<=510;i+=10)
return 1; for(j=50;j<=430;j+=10)
return 0; putpixel(i,j,15);
} for(i=130;i<=510;i+=10)
lines::lines() {
{ if(i==320)
x=0;y=0; continue;
cout<<" outtextxy(i,237,"+");
"Enter The Co-Ordinates (x1,y1) ":="; }
cin>>x1>>y1; for(i=50;i<=430;i+=10)
cout<<" {
"Enter The Co-Ordinates (x2,y2) ":="; if(i==240)
cin>>x2>>y2; continue;
cout<<" outtextxy(317,i,"-");
"Enter The Width Of The Line ":="; }
cin>>width; outtextxy(310,230,"O");
} outtextxy(530,240,"X");
outtextxy(320,450,"-Y");
void lines::showline() outtextxy(100,240,"-X");
{ outtextxy(320,30,"Y");
char *s,*s1; a.showline();
if(abs(x2-x1)>=abs(y2-y1)) closegraph();
length=abs(x2-x1); }
else
length=abs(y2-y1);
w=width; Program to implement Bresenhams Line Drawing Algorithm
wx=((w-1)/2)*(sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-
y1))/abs(y2-y1)); #include<iostream.h>
wy=((w-1)/2)*(sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2- #include<graphics.h>
y1))/abs(x2-x1)); #include<conio.h>
dx=(x2-x1)/length; #include<math.h>
dy=(y2-y1)/length; #include<dos.h>
if(dy>dx) #include<stdlib.h>
wy=wx; #include<stdio.h>
x=x1+0.5*sign(dx); class lines
y=y1+0.5*sign(dy); {
int i=1; private:
setcolor(0); int length,x1,y1,x2,y2,x,y,dx,dy,wx,wy,w,width;
while(i<=length) public:
{ lines(); //Constructor
for(int j=0;j<wy;j++) void showline();
putpixel((x+320),480-(y+240+j),6); int sign(int);
for(j=0;j<wy;j++) };
putpixel((x+320),480-(y+240-j),6);
putpixel((x+320),480-(y+240),6); int lines::sign(int xx)
x+=dx; {
y+=dy; if(xx<0)
i++; return -1;
} if(xx==0)
setcolor(15); return 0;
outtextxy(40,10,"The Points Are:="); if(xx>0)
sprintf(s,"A(%d,%d)",x1,y1); return 1;
outtextxy(40,20,s); return 0;
} lines a;
lines::lines() char *mess[]={"B","R","E","S","E","N","H","A","M","'","S","
{ ","L","I","N","E"," ","A","L","G","O","R","I","T","H","M"};
x=0;y=0; initgraph(&gd,&gm,"..\bgi");
cout<<" cleardevice();
"Enter The Co-Ordinates (x1,y1) ":="; rectangle(120,40,320,240);
cin>>x1>>y1; rectangle(320,40,520,240);
cout<<" rectangle(120,240,320,440);
"Enter The Co-Ordinates (x2,y2) ":="; rectangle(320,240,520,440);
cin>>x2>>y2; for(i=0,j=25;i<14,j>=12;i++,j--)
cout<<" {
"Enter The Width Of The Line ":="; xx+=10;
cin>>width; outtextxy(xx,10,mess[i]);
} xxx-=10;
outtextxy(xxx,10,mess[j]);
void lines::showline() delay(100);
{ }
char *s; for(i=130;i<=510;i+=10)
int s1,s2,ic; for(j=50;j<=430;j+=10)
float temp; putpixel(i,j,15);
x=x1;y=1; for(i=130;i<=510;i+=10)
w=width; {
if(y2-y1) if(i==320)
wx=((w-1)/2)*(sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2- continue;
y1))/abs(y2-y1)); outtextxy(i,237,"+");
if(x2-x1) }
wy=((w-1)/2)*(sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2- for(i=50;i<=430;i+=10)
y1))/abs(x2-x1)); {
dx=abs(x2-x1); if(i==240)
dy=abs(y2-y1); continue;
s1=sign(x2-x1); outtextxy(317,i,"-");
s2=sign(y2-y1); }
if(dy>dx) outtextxy(310,230,"O");
wy=wx; outtextxy(530,240,"X");
if(dy>dx) outtextxy(320,450,"-Y");
{ outtextxy(100,240,"-X");
temp=dy; outtextxy(320,30,"Y");
dy=dx; a.showline();
dx=temp; closegraph();
ic=1; }
}
else Program to implement Circle Drawing Algorithm
ic=0;
float d=2*dy-dx; #include<iostream.h>
setcolor(0); #include<graphics.h>
for(int i=1;i<=dx;i++) #include<conio.h>
{ #include<math.h>
for(int j=0;j<wy;j++) #include<dos.h>
putpixel((x+320),480-(y+240+j),5); #include<stdlib.h>
for(j=0;j<wy;j++) #include<stdio.h>
putpixel((x+320),480-(y+240-j),5); class myCircle
putpixel((x+320),480-(y+240),5); {
while(d>=0) private:
{ int x,y,r,d,x1,y1;
if(ic==1) public:
x+=s1; myCircle(); //Constructor
else void showCircle();
y+=s2; };
d-=2*dx;
} myCircle::myCircle()
if(ic==1) {
y+=s2; x=0;y=0;
else cout<<"
x+=s1; "Enter The Co-Ordinates Of The Circle ":=";
d+=2*dy; cin>>x>>y;
} cout<<"
setcolor(15); "Enter The Radius Of The Circle ":=";
outtextxy(20,10,"The Points Are:="); cin>>r;
sprintf(s,"A(%d,%d)",x1,y1); }
outtextxy(20,20,s);
sprintf(s,"B(%d,%d)",x2,y2); void myCircle::showCircle()
outtextxy(20,30,s); {
getch(); char *s;
} x1=0;y1=r;
void main() d=3-2*r;
{ while(x1<=y1)
int gd=DETECT,gm,i,j,xx=200,xxx=470; {
clrscr(); putpixel((x+x1+320),(y+y1+240),5);
putpixel((x-x1+320),(y+y1+240),5); #include<stdlib.h>
putpixel((x+x1+320),(y-y1+240),5); #include<stdio.h>
putpixel((x-x1+320),(y-y1+240),5); class myCircle
putpixel((x+y1+320),(y+x1+240),5); {
putpixel((x-y1+320),(y+x1+240),5); private:
putpixel((x+y1+320),(y-x1+240),5); int x,y,r,d,x1,y1,minor,major,dtheta,ratio,a,b,x2,y2;
putpixel((x-y1+320),(y-x1+240),5); public:
if(d<0) myCircle(); //Constructor
d+=4*x1+6; void showCircle();
else };
{
d+=4*(x1-y1)+10; myCircle::myCircle()
y1--; {
} x=0;y=0;
x1++; cout<<"
} "Enter The Major & Minor Axis Of Ellipse ":=";
setcolor(5); cin>>major>>minor;
outtextxy(318+x,235+y,"."); cout<<"
setcolor(15); "Enter The Center Of The Ellipse ":=";
sprintf(s,"Center(%d,%d)",x,y); cin>>x>>y;
outtextxy(20,10,"The Center Is At"); }
outtextxy(20,20,s);
sprintf(s,"Radius=%d",r); void myCircle::showCircle()
outtextxy(20,30,s); {
getch(); char *s;
} int ax,ay;
void main() float ar;
{ x1=1;
int gd=DETECT,gm,i,j,xx=190,xxx=480; ratio=major/minor;
clrscr(); getaspectratio(&ax,&ay);
myCircle a; ar=1;
char *mess[]={"B","R","E","S","E","N","H","A","M","'","S"," // ar=ay/ax;
","C","I","R","C","L","E"," ","A","L","G","O","R","I","T","H","M"}; while(x1<=major)
initgraph(&gd,&gm,"..\bgi"); {
cleardevice(); y1=minor*sqrt((1-(x1*x1/major*major)));
rectangle(120,40,320,240); putpixel((x+x1*ar+320),(y+y1+240),5);
rectangle(320,40,520,240); putpixel((x+x1*ar+320),(y-y1+240),5);
rectangle(120,240,320,440); putpixel((x-x1*ar+320),(y-y1+240),5);
rectangle(320,240,520,440); putpixel((x-x1*ar+320),(y+y1+240),5);
for(i=0,j=27;i<16,j>=14;i++,j--) dtheta=1/sqrt(x1*x1+y1*y1);
{ // x2=x1+cos(dtheta)-ratio*y1*sin(dtheta);
xx+=10; // y2=y1+cos(dtheta)+1/ratio*x1*sin(dtheta);
outtextxy(xx,10,mess[i]); x1++;
xxx-=10; // y1=y2;
outtextxy(xxx,10,mess[j]); }
delay(100); setcolor(5);
} outtextxy(318+x,235+y,".");
for(i=130;i<=510;i+=10) setcolor(15);
for(j=50;j<=430;j+=10) sprintf(s,"Center(%d,%d)",x,y);
putpixel(i,j,15); outtextxy(20,10,"The Center Is At");
for(i=130;i<=510;i+=10) outtextxy(20,20,s);
{ sprintf(s,"Radius=%d",r);
if(i==320) outtextxy(20,30,s);
continue; getch();
outtextxy(i,237,"+"); }
} void main()
for(i=50;i<=430;i+=10) {
{ int gd=DETECT,gm,i,j,xx=190,xxx=480;
if(i==240) clrscr();
continue; myCircle a;
outtextxy(317,i,"-"); char *mess[]={"B","R","E","S","E","N","H","A","M","'","S","
} ","C","I","R","C","L","E"," ","A","L","G","O","R","I","T","H","M"};
outtextxy(310,230,"O"); initgraph(&gd,&gm,"..\bgi");
outtextxy(530,240,"X"); cleardevice();
outtextxy(320,450,"-Y"); rectangle(120,40,320,240);
outtextxy(100,240,"-X"); rectangle(320,40,520,240);
outtextxy(320,30,"Y"); rectangle(120,240,320,440);
a.showCircle(); rectangle(320,240,520,440);
// closegraph(); for(i=0,j=27;i<16,j>=14;i++,j--)
} {
xx+=10;
Program to implement Ellipse Drawing Algorithm outtextxy(xx,10,mess[i]);
xxx-=10;
#include<iostream.h> outtextxy(xxx,10,mess[j]);
#include<graphics.h> delay(100);
#include<conio.h> }
#include<math.h> for(i=130;i<=510;i+=10)
#include<dos.h> for(j=50;j<=430;j+=10)
putpixel(i,j,15); }
for(i=130;i<=510;i+=10) void D_2::initialize()
{ {
if(i==320) int gdrive = DETECT,gmode;
continue; initgraph(&gdrive,&gmode,"c: cgi");
outtextxy(i,237,"+"); }
}
for(i=50;i<=430;i+=10) void D_2::GetPoints()
{ {
if(i==240) closegraph();
continue; cout<<"Enter The Points Of The Triangle.";
outtextxy(317,i,"-"); for(int j=0;j<MAXSIZE;j++)
} {
outtextxy(310,230,"O"); cout<<"Enter Point "<<j+1<<":-";
outtextxy(530,240,"X"); for(int i=0;i<MAXSIZE-1;i++)
outtextxy(320,450,"-Y"); {
outtextxy(100,240,"-X"); cout<<"Enter "<<char(i+'X')<<": ";
outtextxy(320,30,"Y"); cin>>Points[i][j];
a.showCircle(); }
} }
initialize();
Two-Dimension Transformation In Homogeneous Coordinate }
This Program Deals With All Two-D Transformation Such As Translation, void D_2::Mult(double temp[MAXSIZE][MAXSIZE])
Scaling, Rotation, {
Reflection, Shearing In Homogeneous Coordinates. int i,j,k;
double z[MAXSIZE][MAXSIZE];
for(i=0;i<MAXSIZE;i++)
{
Code : for(j=0;j<MAXSIZE;j++)
//TwoDimensional Transformations In Homogeneous z[i][j]=0;
}
#include<graphics.h>
#include<iostream.h> for(i=0;i<MAXSIZE;i++)
#include<Math.h> {
#include<conio.h> for(j=0;j<MAXSIZE;j++)
#define MAXSIZE 3 {
D1.GetPoints(); #include<iostream.h>
D1.Draw(GREEN); #include<dos.h>
getch(); #include<stdio.h>
#include<math.h>
do #include<conio.h>
{ #include<graphics.h>
closegraph(); #include<process.h>
clrscr();
cout<<"1.To ReDraw The Triangle."; int gd=DETECT,gm;
cout<<"2.Translate The Triangle."; double x1,x2,y1,y2;
cout<<"3.Scaling The Triangle About Fixed Point.";
cout<<"4.Scaling The Triangle In A Direction."; void show_message()
cout<<"5.Rotating The Triangle About Arbitrary {
Point."; char *mess[]={"-","=","[","
cout<<"6.Reflecting The Triangle About Arbitrary ","3","D","-","T","r","a","n","s","f","o","r","m","a","t","i","o","n","
Line."; ","]","=","-"};
cout<<"7.Shearing Of The Triangle."; int xx=28,xxx=52,i,j;
cout<<"8.Exit."; _setcursortype(_NOCURSOR);
cout<<"Enter The Choice: "; for(i=0,j=24;i<15,j>=12;i++,j--)
cin>>ch; {
D1.initialize(); gotoxy(xx,1);
switch(ch) cout<<mess[i];
{ xx++;
case 1: gotoxy(xxx,1);
D1.GetPoints(); cout<<mess[j];
D1.Draw(GREEN); xxx--;
getch(); delay(50);
break; }
_setcursortype(_NORMALCURSOR);
case 2: }
cleardevice();
D1.Translate();
getch(); void draw_cube(double edge[20][3])
closegraph(); {
break; initgraph(&gd,&gm,"..\bgi");
case 3: int i;
cleardevice(); clearviewport();
D1.Scale_Fixed(); for(i=0;i<19;i++)
getch(); {
x1=edge[i][0]+edge[i][2]*(cos(2.3562)); edge[i][2]=temp*sin(theta)
y1=edge[i][1]-edge[i][2]*(sin(2.3562)); +temp1*cos(theta);
x2=edge[i+1][0]+edge[i+1][2]*(cos(2.3562)); }
y2=edge[i+1][1]-edge[i+1][2]*(sin(2.3562)); draw_cube(edge);
line(x1+320,240-y1,x2+320,240-y2); break;
}
line(320,240,320,25); case 2:
line(320,240,550,240); cout<<" " Enter The Angle
line(320,240,150,410); ":=";
getch(); cin>>theta;
closegraph(); theta=(theta*3.14)/180;
} for(i=0;i<20;i++)
{
void scale(double edge[20][3]) edge[i][1]=edge[i][1];
{ temp=edge[i][0];
double a,b,c; temp1=edge[i][2];
int i; edge[i][0]=temp*cos(theta)
cout<<" +temp1*sin(theta);
" Enter The Scaling Factors ":="; edge[i][2]=-temp*sin(theta)
cin>>a>>b>>c; +temp1*cos(theta);
initgraph(&gd,&gm,"..\bgi"); }
clearviewport(); draw_cube(edge);
for(i=0;i<20;i++) break;
{
edge[i][0]=edge[i][0]*a; case 3:
edge[i][1]=edge[i][1]*b; cout<<"
edge[i][2]=edge[i][2]*c; " Enter The Angle ":=";
} cin>>theta;
draw_cube(edge); theta=(theta*3.14)/180;
closegraph(); for(i=0;i<20;i++)
} {
edge[i][2]=edge[i][2];
void translate(double edge[20][3]) temp=edge[i][0];
{ temp1=edge[i][1];
int a,b,c; edge[i][0]=temp*cos(theta)-
int i; temp1*sin(theta);
cout<<" edge[i][1]=temp*sin(theta)
" Enter The Translation Factors ":="; +temp1*cos(theta);
cin>>a>>b>>c; }
initgraph(&gd,&gm,"..\bgi"); draw_cube(edge);
clearviewport(); break;
for(i=0;i<20;i++) }
{ }
edge[i][0]+=a;
edge[i][0]+=b; void reflect(double edge[20][3])
edge[i][0]+=c; {
} int ch;
draw_cube(edge); int i;
closegraph(); clrscr();
} cout<<" -=[ Reflection About ]=-";
cout<<" 1:==>" X-Axis "";
void rotate(double edge[20][3]) cout<<" 2:==>" Y-Axis "";
{ cout<<" 3:==>" Z-Axis "";
int ch; cout<<" " Enter Your Choice ":=";
int i; cin>>ch;
double temp,theta,temp1; switch(ch)
clrscr(); {
cout<<" case 1:
-=[ Rotation About ]=-"; for(i=0;i<20;i++)
cout<<" 1:==>" X-Axis ""; {
cout<<" 2:==>" Y-Axis ""; edge[i][0]=edge[i][0];
cout<<" 3:==>" Z-Axis ""; edge[i][1]=-edge[i][1];
cout<<" " Enter Your Choice ":="; edge[i][2]=-edge[i][2];
cin>>ch; }
switch(ch) draw_cube(edge);
{ break;
case 1:
cout<<" " Enter The Angle case 2:
":="; for(i=0;i<20;i++)
cin>>theta; {
theta=(theta*3.14)/180; edge[i][1]=edge[i][1];
for(i=0;i<20;i++) edge[i][0]=-edge[i][0];
{ edge[i][2]=-edge[i][2];
edge[i][0]=edge[i][0]; }
temp=edge[i][1]; draw_cube(edge);
temp1=edge[i][2]; break;
edge[i][1]=temp*cos(theta)-
temp1*sin(theta); case 3:
for(i=0;i<20;i++) void main()
{ {
edge[i][2]=edge[i][2]; int choice;
edge[i][0]=-edge[i][0]; double edge[20][3]=
edge[i][1]=-edge[i][1]; {
} 100,0,0,
draw_cube(edge); 100,100,0,
break; 0,100,0,
} 0,100,100,
} 0,0,100,
0,0,0,
void perspect(double edge[20][3]) 100,0,0,
{ 100,0,100,
int ch; 100,75,100,
int i; 75,100,100,
double p,q,r; 100,100,75,
clrscr(); 100,100,0,
cout<<" -=[ Perspective Projection 100,100,75,
About ]=-"; 100,75,100,
cout<<" 1:==>" X-Axis ""; 75,100,100,
cout<<" 2:==>" Y-Axis ""; 0,100,100,
cout<<" 3:==>" Z-Axis ""; 0,100,0,
cout<<" " Enter Your Choice ":="; 0,0,0,
cin>>ch; 0,0,100,
switch(ch) 100,0,100
{ };
case 1: while(1)
cout<<" {
" Enter P ":="; clrscr();
cin>>p; show_message();
for(i=0;i<20;i++) cout<<" 1:==>" Draw Cube "";
{ cout<<" 2:==>" Scaling "";
edge[i][0]=edge[i][0]/(p*edge[i] cout<<" 3:==>" Rotation "";
[0]+1); cout<<" 4:==>" Reflection "";
edge[i][1]=edge[i][1]/(p*edge[i] cout<<" 5:==>" Translation "";
[0]+1); cout<<" 6:==>" Perspective Projection "";
edge[i][2]=edge[i][2]/(p*edge[i] cout<<" 7:==>" Exit "";
[0]+1); cout<<" " Enter Your Choice ":=";
} cin>>choice;
draw_cube(edge); switch(choice)
break; {
case 1:
case 2: draw_cube(edge);
cout<<" break;
" Enter Q ":=";
cin>>q; case 2:
for(i=0;i<20;i++) scale(edge);
{ break;
edge[i][1]=edge[i][1]/(edge[i]
[1]*q+1); case 3:
edge[i][0]=edge[i][0]/(edge[i] rotate(edge);
[1]*q+1); break;
edge[i][2]=edge[i][2]/(edge[i]
[1]*q+1); case 4:
} reflect(edge);
draw_cube(edge); break;
break;
case 5:
case 3: translate(edge);
cout<<" break;
" Enter R ":=";
cin>>r; case 6:
for(i=0;i<20;i++) perspect(edge);
{ break;
edge[i][2]=edge[i][2]/(edge[i]
[2]*r+1); case 7:
edge[i][0]=edge[i][0]/(edge[i] exit(0);
[2]*r+1);
edge[i][1]=edge[i][1]/(edge[i] default:
[2]*r+1); cout<<"
} a" Press A Valid Key...!!! "";
draw_cube(edge); getch();
break; break;
} }
closegraph(); closegraph();
} }
}
A Graphics Illustration Program cout<<" g. Back";
call_assign();
#include<stdio.h> ch1=getch();
#include<iostream.h> clearviewport();
#include<dos.h> if(ch1=='g')
#include<process.h> goto L2;
#include<conio.h> if(ch1=='a')
#include<graphics.h> tx=5;
#include<math.h> if(ch1=='b')
//void render(float,float,float, float,float,float, float,float,float, tx=-5;
float,float,float); if(ch1=='c')
void initialize(void); ty=5;
void firstpage(void); if(ch1=='d')
void call_first(void); ty=-5;
float intensity,alpha,thita,tempy,tempz,tempx; if(ch1=='e')
char ch='4'; tz=10;
char ch1='1'; if(ch1=='f')
char ch2='1'; tz=-10;
int pts1[5][3];
float tx,ty,tz,d=.5; for(i=0;i<5;i++)
void assign(float,float,float,float,float,float,float,float,float); {
void scan_line(float,float,float,float,float,float,float,float,float); pts[i][0]+=tx;
void drawpyramid(float,float,float,float,float,float); pts[i][1]+=ty;
void call_assign(void); pts[i][1]+=tz;
void display(void); }
void tranform(void); }
void draw(void); }
void drawscale(void); if(ch1=='3')
float pts[5][3]={-100,0,0, 0,0,45, 100,0,0, 0,0,-45, 0,130,0}; {
float pts2[5][3]={228,273,0, 305,295,0, 428,273,0, 350,250,0 ,328,143,0}; clearviewport();
float pt[5][3]={-100,0,0, 0,0,45,100,0,0,0,0-45,0,130,0}; cout<<"Enter sx:";
cin>>sx;
void main() cout<<"Enter sy:";
{ cin>>sy;
int i; for(i=0;i<5;i++)
float sx,sy,sz=1; {
struct palettetype pal; pts2[i][0]=abs(pts2[i][0]*sx+200*(1-sx));
int gd,gm; pts2[i][1]=abs(pts2[i][1]*sy+200*(1-sy));
detectgraph(&gd,&gm); }
initgraph(&gd,&gm,"d:\backups\borlandc\bgi"); drawscale();
getpalette(&pal); getch();
firstpage(); }
for(i=16;i>0;i--)
setrgbpalette(pal.colors[i],0,4*i,0); if(ch1=='2')
{
while(ch2!='4')
L1: display(); {
clearviewport();
while(ch1!='4') gotoxy(1,2);
{ cout<<"1.X-axis rotation";
ch='2'; gotoxy(1,3);
L2: call_assign(); cout<<"2.Y-axis rotation";
clearviewport(); gotoxy(1,4);
gotoxy(1,2); cout<<"3.Z-axis rotation";
cout<<"1. Translation gotoxy(1,5);
"; cout<<"4.Back";
cout<<"2. Rotation ch2=getch();
"; if(ch2=='4')
cout<<"3. Scaling break;
"; if(ch2=='1')
cout<<"4. Back {
"; alpha=0;
ch1=getch(); while(alpha<360)
if(ch1=='4') {
{ alpha=alpha+10;
clearviewport(); thita=(alpha*3.142)/180;
goto L1; initialize();
} for(i=0;i<5;i++)
{
if(ch1=='1') tempy=(pts1[i][1]*cos(thita)+pts1[i][2]*sin(thita));
{ pts1[i][2]=(pts1[i][1]*sin(thita)-pts1[i][2]*cos(thita));
clearviewport(); pts1[i][1]=tempy;
while(ch1!='4') }
{ clearviewport();
gotoxy(2,2); draw();
cout<<"a. X+"; cout<<" b. X-"; delay(100);
cout<<" c. Y+"; cout<<" d. Y-"; }
cout<<" e. Z+"; cout<<" f. Z-"; }
rectangle(300,120,580,320);
if(ch2=='2') rectangle(295,115,585,325);
{ setcolor(6);
alpha=0; settextstyle(4,HORIZ_DIR,3);
while(alpha<360) outtextxy(50,100, "OPTIONS");
{ settextstyle(3,HORIZ_DIR,1);
alpha=alpha+10; setcolor(11);
thita=(alpha*3.142)/180; outtextxy(20,150,"1. VISIBLE SURFACE DETECTION");
initialize(); outtextxy(20,190,"2. SURFACE RENDERING");
for(i=0;i<5;i++) outtextxy(20,230,"3. TRANSFORMATIONS");
{ outtextxy(20,270,"4. WIREFRAME DISPLAY");
tempz=(pts1[i][2]*cos(thita)+pts1[i][0]*sin(thita)); outtextxy(20,310,"5. EXIT");
pts1[i][0]=(pts1[i][2]*sin(thita)-pts1[i][0]*cos(thita)); settextstyle(2,HORIZ_DIR,4);
pts1[i][2]=tempz; outtextxy(400,370,"Group Memebers");
} setcolor(YELLOW);
clearviewport(); call_first();
draw(); //display();
delay(100); setcolor(WHITE);
} getch();
} cleardevice();
clearviewport();
if(ch2=='3')
{ }
alpha=0;
while(alpha<360) void display(void)
{ { while(ch!='3')
alpha=alpha+10; { clearviewport();
thita=(alpha*3.142)/180; gotoxy(2,2);
initialize(); cout<<"1. Visible Surface Detection";
for(i=0;i<5;i++) gotoxy(2,3);
{ cout<<"2. Surface Rendering";
tempx=(pts1[i][0]*cos(thita)-pts1[i][1]*sin(thita)); gotoxy(2,4);
pts1[i][1]=(pts1[i][0]*sin(thita)+pts1[i][1]*cos(thita)); cout<<"3. Transformations";
pts1[i][0]=tempx; gotoxy(2,5);
} cout<<"4. Wireframe Display";
clearviewport(); gotoxy(2,6);
draw(); cout<<"5. Exit";
delay(100); call_assign();
clearviewport(); ch=getch();
draw(); if(ch=='5')
} exit(0);
} clearviewport();
if(ch=='3')
} break;
} }
} }
closegraph(); void call_assign(void)
restorecrtmode(); {
} assign(pts[0][0],pts[0][1],pts[0][2],pts[1][0],pts[1][1],pts[1][2],pts[4][
void initialize() 0],pts[4][1],pts[4][2]);
{
pts1[0][0]=-100; assign(pts[1][0],pts[1][1],pts[1][2],pts[2][0],pts[2][1],pts[2][2],pts[4][
pts1[0][1]=-65; 0],pts[4][1],pts[4][2]);
pts1[0][2]=0;
pts1[1][0]=0; assign(pts[2][0],pts[2][1],pts[2][2],pts[3][0],pts[3][1],pts[3][2],pts[4][
pts1[1][1]=-65; 0],pts[4][1],pts[4][2]);
pts1[1][2]=-45;
pts1[2][0]=100; assign(pts[0][0],pts[0][1],pts[0][2],pts[4][0],pts[4][1],pts[4][2],pts[3][
pts1[2][1]=-65; 0],pts[3][1],pts[3][2]);
pts1[2][2]=0; }
pts1[3][0]=0; void call_first(void)
pts1[3][1]=-65; {
pts1[3][2]=45; assign(pt[0][0],pt[0][1],pt[0][2],pt[1][0],pt[1][1],pt[1][2],pt[4][0],pt[4
pts1[4][0]=0; ][1],pt[4][2]);
pts1[4][1]=65;
pts1[4][2]=0; assign(pt[1][0],pt[1][1],pt[1][2],pt[2][0],pt[2][1],pt[2][2],pt[4][0],pt[4
][1],pt[4][2]);
}
assign(pt[2][0],pt[2][1],pt[2][2],pt[3][0],pt[3][1],pt[3][2],pt[4][0],pt[4
void firstpage() ][1],pt[4][2]);
{
clearviewport(); assign(pt[0][0],pt[0][1],pt[0][2],pt[4][0],pt[4][1],pt[4][2],pt[3][0],pt[3
setcolor(WHITE); ][1],pt[3][2]);
settextstyle(2,HORIZ_DIR,5); }
outtextxy(250,15,"A Project on");
setcolor(GREEN);
settextstyle(3,HORIZ_DIR,4);
outtextxy(170,25,"PYRAMID MODELING");
{
int i;
void drawpyramid(float x1,float y1,float x2,float y2,float x3,float y3) float tempx,tempx1,tempy;
{ float m1,m2,thita,alpha;
line(x1,y1,x2,y2); alpha=0;
line(x2,y2,x3,y3);
line(x3,y3,x1,y1); tempx=x1; tempx1=x1; tempy=y1;
} m1=(y2-y1)/(x2-x1);
m2=(y3-y1)/(x3-x1);
void assign(float x1,float y1,float z1,float x2,float y2,float z2,float
x3,float y3,float z3) while((int)tempy!=(int)y2)
{ { alpha=alpha+5;
float A,B,C; thita=(alpha*3.14/180);
float temp,An,Bn,Cn,X,Y,Z; tempx=tempx-1/m1;
float Xl=-6,Yl=10,Zl=50; tempx1=tempx1-1/m2;
float templ; if(tempx<tempx1)
{
for(i=0;i+tempx<=tempx1;i++)
A=y1*(z2-z3)+y2*(z3-z1)+y3*(z1-z2); {
B=z1*(x2-x3)+z2*(x3-x1)+z3*(x1-x2); putpixel(tempx+i,tempy,intensity);
C=x1*(y2-y3)+x2*(y3-y1)+x3*(y1-y2); }
}
temp=sqrt(A*A+B*B+C*C); else
templ=sqrt(Xl*Xl+Yl*Yl+Zl*Zl); if (tempx1<tempx)
{ for(i=0;i+tempx1<=tempx;i++)
X=(float)Xl/templ; Y=(float)Yl/templ; Z=(float)Zl/templ; {
An=(A/temp); Bn=(float)B/temp; Cn=(float)C/temp; putpixel(tempx1+i,tempy,intensity);
}
intensity=15*(An*X+Bn*Y+Cn*Z); }
tempy--;
if (intensity<0) }
intensity=0;
if (intensity>15) m1=(float)(y3-y2)/(x3-x2);
intensity=15;
while((int)tempy!=(int)y3)
z1=55-z1; {
x1=x1+300+(d*z1); y1=300-y1-(d*z1); tempx=tempx-1/m1;
z2=55-z2; tempx1=tempx1-1/m2;
x2=x2+300+(d*z2); y2=300-y2-(d*z2); if(tempx<tempx1)
z3=55-z3; {
x3=x3+300+(d*z3); y3=300-y3-(d*z3); for(i=0;i+tempx<=tempx1;i++)
putpixel(tempx+i,tempy,intensity);
if(ch=='1') }
{ if(intensity==0) return; else
drawpyramid(x1,y1,x2,y2,x3,y3); {
return; for(i=0;i+tempx1<=tempx;i++)
} putpixel(tempx1+i,tempy,intensity);
if(ch=='3') }
exit(0); tempy--;
}
if(ch=='4') }
drawpyramid(x1,y1,x2,y2,x3,y3);
void draw()
if(ch=='2') { int i;
{ for(i=0;i<5;i++)
if(intensity==0) return; {
if ((y1>y2) && (y1>y3) && (y2>y3)) pts1[i][2]=50+pts1[i][2]+50;
scan_line(x1,y1,z1,x2,y2,z2,x3,y3,z3); pts1[i][0]=pts1[i][0]+300+.5*pts1[i][2];
pts1[i][1]=200+65-pts1[i][1]-.5*pts1[i][2];
if ((y1>y2) && (y1>y3) && (y3>y2)) }
scan_line(x1,y1,z1,x3,y3,z3,x2,y2,z2); line(pts1[0][0],pts1[0][1],pts1[1][0],pts1[1][1]);
line(pts1[1][0],pts1[1][1],pts1[2][0],pts1[2][1]);
if ((y2>y1) && (y2>y3) && (y1>y3)) line(pts1[2][0],pts1[2][1],pts1[3][0],pts1[3][1]);
scan_line(x2,y2,z2,x1,y1,z1,x3,y3,z3); line(pts1[3][0],pts1[3][1],pts1[0][0],pts1[0][1]);
line(pts1[0][0],pts1[0][1],pts1[4][0],pts1[4][1]);
if ((y2>y1) && (y2>y3) && (y3>y1)) line(pts1[1][0],pts1[1][1],pts1[4][0],pts1[4][1]);
scan_line(x2,y2,z2,x3,y3,z3,x1,y1,z1); line(pts1[2][0],pts1[2][1],pts1[4][0],pts1[4][1]);
line(pts1[3][0],pts1[3][1],pts1[4][0],pts1[4][1]);
if ((y3>y1) && (y3>y2) && (y1>y2)) }
scan_line(x3,y3,z3,x1,y1,z1,x2,y2,z2); void drawscale()
{
if ((y3>y1) && (y3>y2) && (y2>y1)) line(pts2[0][0],pts2[0][1],pts2[1][0],pts2[1][1]);
scan_line(x3,y3,z3,x2,y2,z2,x1,y1,z1); line(pts2[1][0],pts2[1][1],pts2[2][0],pts2[2][1]);
} line(pts2[2][0],pts2[2][1],pts2[3][0],pts2[3][1]);
} line(pts2[3][0],pts2[3][1],pts2[0][0],pts2[0][1]);
line(pts2[0][0],pts2[0][1],pts2[4][0],pts2[4][1]);
void scan_line(float x1,float y1,float z1,float x2,float y2,float z2,float line(pts2[1][0],pts2[1][1],pts2[4][0],pts2[4][1]);
x3,float y3,float z3) line(pts2[2][0],pts2[2][1],pts2[4][0],pts2[4][1]);
line(pts2[3][0],pts2[3][1],pts2[4][0],pts2[4][1]);
}
Progress bar
#include<graphics.h>
#include<conio.h>
#include<alloc.h>
#include<dos.h>
void main()
{
int gd=DETECT,gm;
initgraph(&gd,&gm,"c:\tc "); //put your directory where egavga.bgi
is
void *buffer;
unsigned int size;
setbkcolor(BLUE);
line(230,330,370,330);
line(230,350,370,350);
line(226,335,226,345);
line(226,335,230,330);
line(226,345,230,350);
line(374,335,374,345);
line(374,335,370,330);
line(374,345,370,350);
outtextxy(275,365,"Loading"); //put you text here
int x=232,y=336,x1=236,y1=344;
for(int i=1;i<5;i++)
{
setfillstyle(1,RED);
bar(x,y,x1,y1);
x=x1+2;
x1=x1+6;
}
size=imagesize(232,336,256,344);
buffer=malloc(size);
getimage(232,336,256,344,buffer);
x=232;
int m=0;
while(!kbhit())
{
putimage(x,336,buffer,XOR_PUT);
x=x+2;
if(x>=350)
{
m++;
x=232;
if(m==5) // m is no of times bar moves
return;
}
putimage(x,336,buffer,XOR_PUT);
delay(20); // delay(time) is the speed of moving
bar
// less delay means fast and vice versa
}
getch();
}