CG
CG
CG
//Write C++ program to draw a concave polygon and fill it with desired color using scan fill
#include <conio.h>
#include <iostream>
#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;
cin>>v;
if(v>2) {
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
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;
//DISPLAY FUNCTION
void poly::display()
int ch1;
char ch='y';
float s,s2;
do {
cout<<"\n\nMENU:";
cin>>ch1;
switch(ch1) {
case 1:
s=ymin+0.01;
delay(100);
cleardevice();
while(s<=ymax) {
ints(s);
sort(s);
s++;
break;
case 2:
exit(0);
cin>>ch;
}while(ch=='y' || ch=='Y');
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;
x=((x2-x1)*(z-y1))/(y2-y1);
x=x+x1;
inter[c++]=x;
}}
int temp,j,i;
for(i=0;i<v;i++) {
delay(100);
for(i=0; i<c;i+=2) {
delay(100);
int cl;
initwindow(500,600);
cleardevice();
poly x;
x.read();
x.calcs();
cleardevice();
setcolor(cl);
x.display();
getch();
return 0;
Output:
Practical No: 2
// line clipping
#include<iostream>
#include<stdlib.h>
#include<math.h>
#include<graphics.h>
#include<dos.h>
int x,y;
char code[4];
}PT;
void drawwindow();
PT setcode(PT p);
int main()
int gd=DETECT,v,gm;
PT p1,p2,p3,p4,ptemp;
cin>>p1.x>>p1.y;
cin>>p2.x>>p2.y;
initgraph(&gd,&gm,"c:\\turboc3\\bgi");
drawwindow();
delay(5000);
drawline(p1,p2);
delay(5000);
cleardevice();
delay(5000);
p1=setcode(p1);
p2=setcode(p2);
v=visibility(p1,p2);
delay(5000);
switch(v)
case 0: drawwindow();
delay(5000);
drawline(p1,p2);
break;
case 1: drawwindow();
delay(5000);
break;
case 2: p3=resetendpt(p1,p2);
p4=resetendpt(p2,p1);
drawwindow();
delay(5000);
drawline(p3,p4);
break;
delay(5000);
closegraph();
return 0;
void drawwindow()
line(150,100,450,100);
line(450,100,450,350);
line(450,350,150,350);
line(150,350,150,100);
line(p1.x,p1.y,p2.x,p2.y);
PT ptemp;
if(p.y<100)
ptemp.code[0]='1'; //Top
else
ptemp.code[0]='0';
if(p.y>350)
ptemp.code[1]='1'; //Bottom
else
ptemp.code[1]='0';
if(p.x>450)
ptemp.code[2]='1'; //Right
else
ptemp.code[2]='0';
if(p.x<150)
ptemp.code[3]='1'; //Left
else
ptemp.code[3]='0';
ptemp.x=p.x;
ptemp.y=p.y;
return(ptemp);
int i,flag=0;
for(i=0;i<4;i++)
if((p1.code[i]!='0') || (p2.code[i]!='0'))
flag=1;
if(flag==0)
return(0);
for(i=0;i<4;i++)
flag='0';
if(flag==0)
return(1);
return(2);
PT 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];
return (temp);
if(p1.code[0]=='1')
y=100;
if(p1.code[1]=='1')
y=350;
if((p1.code[0]=='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 No: 3
/*EXPERIMENT Write C++ program to draw the following pattern. Use DDA
encapsulation. */
#include <graphics.h>
#include<iostream>
#include <math.h>
float x,y,p;
x=0;
y=r;
while(x<=y)
octant*/
putpixel(x1-x,y1+y,WHITE);
putpixel(x1+x,y1-y,WHITE);
putpixel(x1-x,y1-y,WHITE);
putpixel(x1+y,y1+x,WHITE);
putpixel(x1+y,y1-x,WHITE);
putpixel(x1-y,y1+x,WHITE);
putpixel(x1-y,y1-x,WHITE);
x=x+1;
if(p<0)
p=p+4*(x)+6;
else
p=p+4*(x-y)+10;
y=y-1;
}
delay(40);
int dx,dy,m,s;
float xi,yi,x,y;
dx = x2 - x1;
dy = y2 - y1;
s = abs(dx);
else
s = abs(dy);
xi = dx / (float) s;
yi = dy / (float) s;
x = x1;
y = y1;
putpixel(x, y, WHITE);
x += xi;
y += yi;
delay(500);
int main()
int xc,yc,r;
cin>>xc>>yc;
cin>>r;
int gd=DETECT,gm=DETECT,x1,y1,x2,y2;
initgraph(&gd,&gm,NULL);
circlebres(xc,yc,r); //inside circle
double height,side;
//side=r/0.577;
//height=1.73*side;
side=1.73*r;
height=1.73*side;
delay(300);
circlebres(xc,yc,height-r);//outer circle
delay(3000);
closegraph();
Output:
Practical No: 4
// Write C++ program to draw 2-D object and perform following basic transformations,
#include<math.h>
#include<graphics.h>
class matrix {
public:
int n,i,j,tx,ty,k,sum,sx,sy;
double a[6][3],b[6][3],mult[6][3],mat3[6][3];
double p,q,r;
double ang=0,angle=0;
public:
void get()
cin>>n;
for(i=0;i<n;i++)
cout<<"enter x n y co ordinates";
cin>>b[i][0];
cin>>b[i][1];
b[i][2]=1;
for(i=0;i<n;i++)
for(j=0;j<3;j++)
cout<<b[i][j]<<"\t";
}cout<<"\n";
}
void identitymat()
for(i=0;i<n;i++)
for(j=0;j<3;j++)
if(i==j)
a[i][j]=1;
else
a[i][j]=0;
}}
}}
void trans()
cin>>tx>>ty;
a[2][0]=tx;
a[2][1]=ty;
cout<<"matrix is"<<"\n";
for(i=0;i<n;i++) {
for(j=0;j<3;j++)
cout<<a[i][j]<<"\t";
}cout<<"\n";
void scale() {
cin>>sx>>sy;
a[0][0]=sx;
a[1][1]=sy;
for(j=0;j<3;j++) {
cout<<a[i][j]<<"\t";
}cout<<"\n";
}}
void rot()
cin>>ang;
angle=(ang*3.142)/180;
q=sin(angle);
p=cos(angle);
r=-sin(angle);
a[0][0]=p;
a[0][1]=q;
a[1][0]=r;
a[1][1]=p;
for(i=0;i<3;i++)
for(j=0;j<3;j++) {
cout<<a[i][j]<<"\t";
}cout<<"\n";
void multi() {
sum=0;
mat3[i][j] = sum;
} }
}
void display() {
cout<<mat3[i][j]<<" ";
cout<<"\n";
int gd=DETECT,gm;
initgraph(&gd,&gm,NULL);
for(int i=0;i<n-1;i++)
line(b[i][0],b[i][1],b[i+1][0],b[i+1][1]);
line(b[2][0],b[2][1],b[0][0],b[0][1]);
for(int i=0;i<n-1;i++)
line(mat3[i][0],mat3[i][1],mat3[i+1][0],mat3[i+1][1]);
line(mat3[2][0],mat3[2][1],mat3[0][0],mat3[0][1]);
delay(5000);
closegraph();
};
int main() {
matrix g;
int ch;
char ans;
g.get();
g.identitymat();
do {
cout<<"menu\n1.translation\n2.scaling\n3.rotation";
cin>>ch;
switch(ch)
case 1:
g.trans();
g.multi();
g.display();
break;
case 2:
g.scale();
g.multi();
g.display();
break;
case 3:
g.rot();
g.multi();
g.display();
break;
}cin>>ans;
}while(ans=='Y'&& ans=='y');
return 0;
Output:
Practical No: 5
#include<graphics.h>
#include<math.h>
void snow(int x1, int y1, int x2, int y2, int it)
int x3 = (2*x1+x2)/3;
int y3 = (2*y1+y2)/3;
int x4 = (x1+2*x2)/3;
int y4 = (y1+2*y2)/3;
int x = x3+(x4-x3)*cos(angle)+(y4-y3)*sin(angle);
int y = y3-(x4-x3)*sin(angle)+(y4-y3)*cos(angle);
if(it > 0)
else
int main()
int gd = DETECT,gm;
snow(250,350,150,100,2);
snow(350,100,250,350,2);
getch();
return 0;
Output:
Snowflow:
#include<iostream>
#include<math.h>
#include<graphics.h>
class kochCurve
public:
{
int x2,y2,x3,y3,x4,y4;
int dx,dy;
if(it==0)
line(x1,y1,x5,y5);
else
delay(0.5);
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;
cin>>it;
int gd=DETECT,gm;
initgraph(&gd,&gm,NULL);
k.koch(it,150,20,20,280);
k.koch(it,280,280,150,20);
k.koch(it,20,280,280,280);
getch();
closegraph();
return 0;
Output:
Practical No: 6
#include<iostream>
#include<graphics.h>
#include<cstdlib>
int main()
if (errorcode != grOk)
int i, j;
delay(120);
if (i <= 150)
{
setcolor(YELLOW); // Set color to YELLOW
delay(1000);
cleardevice();
delay(150);
int k, l;
delay(120);
if (k <= 450)
return 0;
}
Output:
Practical No: 7
#include<stdio.h>
#include<conio.h>
#include<graphics.h>
#include<stdlib.h>
#include<dos.h>
class WalkingMan{
int rhx,rhy;
public:
};
line(20,380,580,380); //platform
if(i%2==0) {
line(25+i,380,35+i,340); //leftleg
line(45+i,380,35+i,340);//right leg
line(35+i,310,25+i,330);//left hand
delay(20);
Else {
line(35+i,380,35+i,340);
line(35+i,310,40+i,330);
delay(20);
line(35+i,340,35+i,310); //body
circle(35+i,300,10); //head
line(35+i,310,50+i,330); // hand
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;
int rhx,rhy,j,i;
WalkingMan obj;
initgraph(&gd,&gm,"");
for(i=0;i<500;i+=5). {
obj.draw(i);
rhx=getmaxx();
rhy=getmaxy();
obj.draw(rhx,rhy);
delay(150);
cleardevice();
getch();
Output: