0% found this document useful (0 votes)
16 views30 pages

Samarth CG

Uploaded by

mahesh Pawal
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
16 views30 pages

Samarth CG

Uploaded by

mahesh Pawal
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 30

PRACTICAL 1

NAME : Patil Samarth

TITLE : Write c++program to draw the following pattern. Use DDA line
and Bresenham`s Apply the concept of encapsulation
CODE:-
#include<conio.h>
#include<iostream.h>
#include<graphics.h>
#include<math.h>

class drawpattern
{
private:

float dx,dy,i,length;
float count;

public:
int x1,y1,x2,y2;
int xmid,ymid;
void getdata();
void ddaline(int x1,int x2,int y1,int y2);

int xc,yc,r;
void bdrawcircle(int xc,int yc,int r);
};
void drawpattern::getdata()
{ cout<<"name:Patil Samarth"<<endl;
cout<<"Enter x1";
cin>>x1;
cout<<"Enter y1";
cin>>y1;
cout<<"Enter x2";
cin>>x2;
cout<<"Enter y2";
cin>>y2;
}

void drawpattern::ddaline(int x1, int x2, int y1, int y2)


{
float x,y;
dx = (x2-x1);
dy = (y2-y1);

if(abs(dx)>=abs(dy)) length = abs(dx);


else length = abs(dy);
dx = dx/length;
dy = dy/length;

x=x1;
y=y1;
i=1;

while(i<=length){

x = x + dx;
y = y + dy;

putpixel(x,y,15);
i++;
};
}
void drawpattern::bdrawcircle(int xc,int yc,int r)
{
int x,y,d;
x=0;
y=r;
putpixel(xc+x,yc-y,15);

d=3-2*r;
do
{
putpixel(xc+x,yc+y,15);
putpixel(xc-x,yc-y,15);
putpixel(xc+x,yc-y,15);
putpixel(xc-x,yc+y,15);
putpixel(xc+y,yc-x,15);
putpixel(xc-y,yc-x,15);
putpixel(xc+y,yc+x,15);
putpixel(xc-y,yc+x,15);

if(d<0)
{
y=y;
d=d+4*x+6;
}
else
{
d=d+4*(x-y)+10;
y=y-1;
}
x=x+1;
}
while(x<=y);
}
int main()
{
clrscr();
int gdriver= DETECT, gmode;
initgraph(&gdriver,&gmode,"c://Turboc3//BGI");

cleardevice();
drawpattern d;
d.getdata();
d.ddaline(d.x1,d.y1,d.x2,d.y1);
d.ddaline(d.x2,d.y1,d.x2,d.y2);
d.ddaline(d.x2,d.y2,d.x1,d.y2);
d.ddaline(d.x1,d.y2,d.x1,d.y1);

d.xmid=abs((d.x1+d.x2))/2;
d.ymid=abs((d.y1+d.y2))/2;
d.ddaline(d.xmid,d.y1,d.x2,d.ymid);
d.ddaline(d.x2,d.ymid,d.xmid,d.y2);
d.ddaline(d.xmid,d.y2,d.x1,d.ymid);
d.ddaline(d.x1,d.ymid,d.xmid,d.y1);
float rad,cal,sidex,sidey;
sidex=abs(d.x2-d.x1);
sidex=abs(d.y2-d.y1);
cal=pow(sidex,2)+pow(sidey,2);
cal=2*sqrt(cal);
rad=(sidex*sidey)/cal;

cout<<sidex<<""<<sidey;
cout<<""<<rad;
d.bdrawcircle(d.xmid,d.ymid,rad);
getch();
closegraph();
getch();
return 0;
}
OUTPUT
PRACTICAL 2
NAME : Patil Samarth

TITLE : Write C++ program to draw a concave polygon and fill it with desired color using
scan fill algorithm.
CODE:-

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

class point
{
public:
int x,y;
};

class poly
{
private:
point p[20];
int inter[20],x,y;
int v,xmin,ymin,xmax,ymax;
public:
int c;
void read();
void calcs();
void display();
void ints(float);
void sort(int);
};

void poly::read()
{
int i;
cout<<"\n\t SCAN_FILL ALGORITHM";
cout<<"\n Enter the no of vertices of polygon:";
cin>>v;
if(v>2)
{
for(i=0;i<v; i++)
{
cout<<"\nEnter the co-ordinate no.- "<<i+1<<" : ";
cout<<"\n\tx"<<(i+1)<<"=";
cin>>p[i].x;
cout<<"\n\ty"<<(i+1)<<"=";
cin>>p[i].y;
}
p[i].x=p[0].x;
p[i].y=p[0].y;
xmin=xmax=p[0].x;
ymin=ymax=p[0].y;
}
else
cout<<"\n Enter valid no. of vertices.";
}

void poly::calcs()
{ //MAX,MIN
for(int i=0;i<v;i++)
{
if(xmin>p[i].x)
xmin=p[i].x;
if(xmax<p[i].x)
xmax=p[i].x;
if(ymin>p[i].y)
ymin=p[i].y;
if(ymax<p[i].y)
ymax=p[i].y;
}
}

void poly::display()
{
int ch1;
char ch='y';
float s,s2;
do
{
cout<<"\n\nMENU:";
cout<<"\n\n\t1 . Scan line Fill ";
cout<<"\n\n\t2 . Exit ";
cout<<"\n\nEnter your choice:";
cin>>ch1;
switch(ch1)
{
case 1:
s=ymin+0.01;

cleardevice();
while(s<=ymax)
{
ints(s);
sort(s);
s++;
}
break;
case 2:
exit(0);
}
cout<<"Name:-Patil Samarth"<<endl;
cout<<"Do you want to continue?: ";
cin>>ch;
}while(ch=='y' || ch=='Y');
}

void poly::ints(float z)
{
int x1,x2,y1,y2,temp;
c=0;
for(int i=0;i<v;i++)
{
x1=p[i].x;
y1=p[i].y;
x2=p[i+1].x;
y2=p[i+1].y;
if(y2<y1)
{
temp=x1;
x1=x2;
x2=temp;
temp=y1;
y1=y2;
y2=temp;
}
if(z<=y2&&z>=y1)
{
if((y1-y2)==0)
x=x1;
else
{
x=((x2-x1)*(z-y1))/(y2-y1);
x=x+x1;
}
if(x<=xmax && x>=xmin)
inter[c++]=x;
}
}
}

void poly::sort(int z)
{
int temp,j,i;

for(i=0;i<v;i++)
{
line(p[i].x,p[i].y,p[i+1].x,p[i+1].y);
}

for(i=0; i<c;i+=2)
{

line(inter[i],z,inter[i+1],z);
}
}

int main()
{
int cl;
int gdriver =DETECT ,gmode;
initgraph(&gdriver,&gmode,"c://turboc3//BGI");
cleardevice();
poly x;
x.read();
x.calcs();
cleardevice();
cout<<"\n\tEnter the colour u want:(0-15)->"; //Selecting colour
cin>>cl;
setcolor(cl);
x.display();
closegraph();
getch();
return 0;
}
OUTPUT
PRACTICAL 3

NAME : Patil Samarth

TITLE : Write c++ program implement cohen sutheriand line clipping algorithm
CODE:-

#include<iostream.h>
#include<stdlib.h>
#include<math.h>
#include<graphics.h>
#include<dos.h>
#include<conio.h> class
Coordinate
{

public:

int x,y;
char code[4];
};
class Lineclip
{

public:

Coordinate PT;
void drawwindow();
void drawline(Coordinate p1,Coordinate p2); Coordinate
setcode(Coordinate p);
int visibility(Coordinate p1,Coordinate p2); Coordinate
resetendpt(Coordinate p1,Coordinate p2);
};
int main()
{

Lineclip lc;
int gd = DETECT,v,gm;
Coordinate p1,p2,p3,p4,ptemp;

cout<<"\n Enter x1 and y1\n";


cin>>p1.x>>p1.y;
cout<<"\n Enter x2 and y2\n";
cin>>p2.x>>p2.y;

initgraph(&gd,&gm,"c:\\turboc3\\BGI");
lc.drawwindow();
delay(2000);

lc.drawline (p1,p2);
delay(2000);

cleardevice();

delay(2000);
p1=lc.setcode(p1);
p2=lc.setcode(p2);
v=lc.visibility(p1,p2);
cout<<"name:-Kakade Siddhu"<<endl;
delay(2000);
switch(v)
{
case 0: lc.drawwindow();
delay(2000);
lc.drawline(p1,p2);
break;
case 1:lc.drawwindow();
delay(2000);
break;
case 2:p3=lc.resetendpt(p1,p2);
p4=lc.resetendpt(p2,p1);
lc.drawwindow();
delay(2000);
lc.drawline(p3,p4);
break;

}
delay(2000);
closegraph();
return 0;
}

void Lineclip::drawwindow()
{
line(150,100,450,100);
line(450,100,450,350);
line(450,350,150,350);
line(150,350,150,100);

void Lineclip::drawline(Coordinate p1,Coordinate p2)


{
line(p1.x,p1.y,p2.x,p2.y);
}

Coordinate Lineclip::setcode(Coordinate p)

{
Coordinate ptemp;

if(p.y<100)
ptemp.code[0]='1';
else
ptemp.code[0]='0';

if(p.y>350)
ptemp.code[1]='1';
else
ptemp.code[1]='0';

if(p.x>450)
ptemp.code[2]='1';
else
ptemp.code[2]='0';

if(p.x<150)
ptemp.code[3]='1';
else
ptemp.code[3]='0';

ptemp.x=p.x;
ptemp.y=p.y;

return(ptemp);

};

int Lineclip:: visibility(Coordinate p1,Coordinate p2)


{
int i,flag=0;

for(i=0;i<4;i++)
{
if(p1.code[i]!='0' || (p2.code[i]=='1'))
flag='0';
}

if(flag==0)
return(0);
for(i=0;i<4;i++)
{
if(p1.code[i]==p2.code[i] && (p2.code[i]=='1'))
flag='0';
}

if(flag==0)
return(1);

return(2);
}

Coordinate Lineclip::resetendpt(Coordinate p1,Coordinate p2)


{
Coordinate temp;
int x,y,i;
float m,k;

if(p1.code[3]=='1')
x=150;
if(p1.code[2]=='1')
x=450;
if((p1.code[3]=='1') || (p1.code[2])=='1')
{

m=(float)(p2.y-p1.y)/(p2.x-p1.x);
k=(p1.y+(m*(x-p1.x)));
temp.y=k;
temp.x=x;

for(i=0;i<4;i++)
temp.code[i]=p1.code[i];

if(temp.y<=350 && temp.y>=100)


return (temp);
}

if(p1.code[0]=='1')
y=100;
if(p1.code[1]=='1')
y=350;
if((p1.code[1]=='1') || (p1.code[1]=='1'))
{
m=(float)(p2.y-p1.y)/(p2.x-p1.x);
k=(float)p1.x+(float)(y-p1.y)/m;
temp.x=k;
temp.y=y;

for(i=0;i<4;i++)
temp.code[i]=p1.code[i];

return(temp)

else

return(p1);
}
OUTPUT
PRACTICAL 4
NAME : Patil Samarth

TITLE : Write C++ program to draw 2-D object and perform following basic
transformation,a) Scaling b) Translation c)Rotation.Apply the concept of operator overloading.
CODE:-

#include<iostream.h>
#include<graphics.h>
#include<math.h>
#include<dos.h>
#include<conio.h>

class transform
{
public:
int m,a[20][20],c[20][20];
int i,j,k;
public:

void object();
void accept();
void operator *(float b[20][20])
{
for(int i=0;i<m;i++)
{
for(int j=0;j<m;j++)
{
c[i][j]=0;
for(int k=0;k<m;k++)
{
c[i][j]=c[i][j]+(a[i][k]*b[k][j]);
}
}
}
}
};
void transform::object()
{
int gd,gm;
gd=DETECT;
initgraph(&gd,&gm,"c://turboc3//BGI");
line(300,0,300,600);
line(0,300,600,300);
for( i=0;i<m-1;i++)
{
line(300+a[i][0],300-a[i][1],300+a[i+1][0],300-a[i+1][1]);
}
line(300+a[0][0],300-a[0][1],300+a[i][0],300-a[i][1]);
for( i=0;i<m-1;i++)
{

line(300+c[i][0],300-c[i][1],300+c[i+1][0],300-c[i+1][1]);
}
line(300+c[0][0],300-c[0][1],300+c[i][0],300-c[i][1]);
int temp;
cout << "Press 1 to continue"<<endl;
cout<<"Name:-Patil Samarth"<<endl;
cin >> temp;

closegraph();
}
void transform::accept()
{
cout<<"\n";
cout<<"Enter the Number Of Edges:";
cin>>m;
cout<<"\nEnter The Coordinates :";
for(int i=0;i<m;i++)
{
for(int j=0;j<3;j++)
{
if(j>=2)
a[i][j]=1;
else
cin>>a[i][j];
}
}
}
int main()
{
int ch,tx,ty,sx,sy;
float deg,theta,b[20][20];
transform t;
t.accept();

cout<<"\nEnter your choice";


cout<<"\n1.Translation"
"\n2.Scaling"
"\n3.Rotation";
cin>>ch;
switch(ch)
{
case 1: cout<<"\nTRANSLATION OPERATION\n";
cout<<"Enter value for tx and ty:";
cin>>tx>>ty;
b[0][0]=b[2][2]=b[1][1]=1;
b[0][1]=b[0][2]=b[1][0]=b[1][2]=0;
b[2][0]=tx;
b[2][1]=ty;
t * b;

t.object();
break;
case 2: cout<<"\nSCALING OPERATION\n";
cout<<"Enter value for sx,sy:";
cin>>sx>>sy;
b[0][0]=sx;
b[1][1]=sy;
b[0][1]=b[0][2]=b[1][0]=b[1][2]=0;
b[2][0]=b[2][1]=0;
b[2][2] = 1;
t * b;
t.object();
break;
case 3: cout<<"\nROTATION OPERATION\n";
cout<<"Enter value for angle:";
cin>>deg;
theta=deg*(3.14/100);
b[0][0]=b[1][1]=cos(theta);
b[0][1]=sin(theta);
b[1][0]=sin(-theta);
b[0][2]=b[1][2]=b[2][0]=b[2][1]=0;
b[2][2]=1;
t * b;
t.object();
break;
default:
cout<<"\nInvalid choice";

getch();

return 0;
}
OUTPUT
PRACTICAL 5
NAME : Patil Samarth

TITLE:-Write c++ program to generate fractal patterns by using koch curves.

CODE:-

#include <iostream.h>
#include <math.h>
#include <graphics.h>
#include<dos.h>
#include<conio.h>

class kochCurve
{
public:
void koch(int it,int x1,int y1,int x5,int y5)
{
int x2,y2,x3,y3,x4,y4;
int dx,dy;
if (it==0)
{
line(x1,y1,x5,y5);
}
else
{
delay(10);
dx=(x5-x1)/3;
dy=(y5-y1)/3;
x2=x1+dx;
y2=y1+dy;
x3=(int)(0.5*(x1+x5)+sqrt(3)*(y1-y5)/6);
y3=(int)(0.5*(y1+y5)+sqrt(3)*(x5-x1)/6);
x4=2*dx+x1;
y4=2*dy+y1;
koch(it-1,x1,y1,x2,y2);
koch(it-1,x2,y2,x3,y3);
koch(it-1,x3,y3,x4,y4);
koch(it-1,x4,y4,x5,y5);
}
}
};
int main()
{
kochCurve k;
int it;
cout<<"Enter Number Of Iterations : "<<endl;
cin>>it;
int gd=DETECT,gm;
initgraph(&gd,&gm,"c://turboc3//BGI");
k.koch(it,150,20,20,280);
k.koch(it,280,280,150,20);
k.koch(it,20,280,280,280);
cout<<"NAME:Patil Samarth"<<endl;
getch();
closegraph();

return 0;
}
OUTPUT
PRACTICAL 7

NAME : Kakade Siddharth Shirish

TITLE:-Write C++ program to draw man walking in the rain with an umbrella.Apply the
concept of polymorphism

CODE:-

#include<iostream>
#include<conio.h>
#include<graphic>
#include<stdlib.h>
#include<dos.h>

class walkingman
{
int rhx,rhy;
public:
void draw(int,int);
void draw(int);
};
void walkingman::draw(int i)
{
line(20,380,580,380);
if(i%2)
{
line(25+i,380,35+i,340);
line(45+i,380,35+i,340);
line(35+i,310,25+i,330);
delay(20);
}
else
{
line(35+i,340,35+i,310);
line(35+i,310,40+i,330);
delay(20);
}
line(35+i,340,35+i,310);
circle(35+i,300,10);
line(35+i,310,50+i,330);
line(50+i,330,50+i,280);
line(15+i,280,85+i,280);
arc(50+i,280,0,180,35);
arc(55+i,330,180,360,5);
}
void walkingman::draw(int x,int y)
{
int j;
rhx=x;
rhy=y;
for
(j=0;j<100;j++)
{
outtextxy(rand()%rhx,rand()%(rhy-50),"|");
setcolor(WHITE);
}
}
int main()
{
int gd=DETECT,gm;
initgraph(&gd,&gm,"c://turboc3//BGI");
int rhx,rhy,j,i;
walkingman obj;
initgraph(&gd,&gm,"");
for(i=0;i<500;i++)
{
obj.draw(i);
rhx=getmaxx();
rhy=getmaxy();
obj.draw(rhx,rhy);
delay(150);
cleardevice();
}
cout<<"Name:-Patil Samarth"<<endl;
getch();
}
OUTPUT

You might also like