Sei sulla pagina 1di 9

Mahatma Gandhi Central University

Bihar

Computer Graphics Lab Program File

Taught by: Submitted by:


Mr. Shubham Kumar Suraj Kumar Gupta
Assistant Prof. MGCU2017CSIT3027
Dept. of CS&IT B.Tech(CSE)
MGCUB Sem-V
1. DDA Line Drawing Algorithm
#include<stdio.h>
#include<graphics.h>
int main()
{
int gd=DETECT,gm;
initgraph(&gd,&gm,"C:\\TURBOC3\\bgi");
float x1,x2,y1,y2;
x1=10; x2=110; y1=5; y2=55; //Given Line Co-ordinates...
float dx,dy,step,xInc,yInc;
dx = abs(x2-x1);
dy = abs(y2-y1);
if(dx > dy)
step = dx;
else
step = dy;
xInc = dx/step;
yInc = dy/step;
for(int i=1; i<=step; i++)
{
putpixel(x1,y1,WHITE); //Drawing Line...
x1 = x1+xInc;
y1 = y1+yInc;
delay(100);
}
getch();
closegraph();
return 0;
}
2. Bresenham’s Line Drawing Algorithm
#include<stdio.h>
#include<graphics.h>

int main()
{
int gd = DETECT,gm;
initgraph(&gd,&gm,"C:\\TURBOC3\\bgi");

float x1,x2,y1,y2;
x1=10; x2=110; y1=5; y2=55; //Given Line Co-ordinates...

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


float p=(2*dy)-dx;
putpixel(x,y,RED);
for(int i=x; i<=x2; i++)
{
putpixel(x,y,WHITE); //Drawing Line...
x++;
if(p<0)
p = p+(2*dy);
else{
p = p+(2*(dy-dx));
y++;
}
}

getch();
closegraph();
}
3. Mid-Point Circle Algorithm
#include<graphics.h>
#include<stdio.h>
void pixel(int xc,int yc,int x,int y);
int main()
{
int gd,gm,xc,yc,r,x,y,p;
detectgraph(&gd,&gm);
initgraph(&gd,&gm,"C://TURBOC3//BGI");
//Centre & Radius Co-ordinates...
xc=250; yc=250;
r=150;

x=0;
y=r;
p=1-r;
pixel(xc,yc,x,y);

while(x<y)
{
if(p<0)
{
x++;
p=p+2*x+1;
}
else
{
x++;
y--;
p=p+2*(x-y)+1;
}
pixel(xc,yc,x,y);
}
getch();
closegraph();
return 0;
}
// Pixeling points of circle...
void pixel(int xc,int yc,int x,int y)
{
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);
}
4. Cohen-Sutherland Line Clipping Algorithm
#include<stdio.h>
#include<graphics.h>

//World Co-ordinate----
int xMin=100, xMax=200, yMin=100, yMax=200;
int a[4];
//Assigning UDLR codes...
void udlr(float x, float y)
{
a[0]=0; a[1]=0; a[2]=0; a[3]=0;

if(y > yMax)


a[0]=1;
if(y < yMin)
a[1]=1;
if(x < xMin)
a[2]=1;
if(x > xMax)
a[3]=1;
}

int main()
{
int gd=DETECT, gm;
initgraph(&gd,&gm,"C:\\TURBOC3\\bgi");

rectangle(xMin,yMin,xMax,yMax);
//line co-ordinate PQ----
float x1=85, x2=225, y1=70, y2=215;
float dx=(x2-x1);
float dy=(y2-y1);
float m=(dy/dx);

setcolor(RED);
line(x1,y1,x2,y2); //Given Line...

udlr(x1,y1);
int a1[4];
for(int i=0;i<4;i++)
a1[i] = a[i];
udlr(x2,y2);
int a2[4];
for(int i=0;i<4;i++)
a2[i] = a[i];
//Clipping Co-ordinates...
float px,py,qx,qy;
for(int i=0; i<4; i++)
{
if(a1[i]==1 && i==0){
py=yMax;
px=((py-y1)/m)+x1;
udlr(px,py);
for(int i=0;i<4;i++)
a1[i] = a[i];
}
if(a1[i]==1 && i==1){
py=yMin;
px=((py-y1)/m)+x1;
udlr(px,py);
for(int i=0;i<4;i++)
a1[i] = a[i];
}
if(a1[i]==1 && i==2){
px=xMin;
py=((px-x1)*m)+y1;
udlr(px,py);
for(int i=0;i<4;i++)
a1[i] = a[i];
}
if(a1[i]==1 && i==3){
px=xMax;
py=((px-x1)*m)+y1;
udlr(px,py);
for(int i=0;i<4;i++)
a1[i] = a[i];
}
if(a2[i]==1 && i==0){
qy=yMax;
qx=((qy-y2)/m)+x2;
udlr(qx,qy);
for(int i=0;i<4;i++)
a2[i] = a[i];
}
if(a2[i]==1 && i==1){
qy=yMin;
qx=((qy-y2)/m)+x2;
udlr(qx,qy);
for(int i=0;i<4;i++)
a2[i] = a[i];
}
if(a2[i]==1 && i==2){
qx=xMin;
qy=((qx-x2)*m)+y2;
udlr(qx,qy);
for(int i=0;i<4;i++)
a2[i] = a[i];
}
if(a2[i]==1 && i==3){
qx=xMax;
qy=((qx-x2)*m)+y2;
udlr(qx,qy);
for(int i=0;i<4;i++)
a2[i] = a[i];
}
}
setcolor(YELLOW);
line(px,py,qx,qy); //Clipped Line...

getch();
closegraph();
return(0);
}
5. Liang-Barsky Line Clipping Algorithm
#include<stdio.h>
#include<graphics.h>

int main()
{
int i,gd=DETECT,gm;
initgraph(&gd,&gm," C:\\TURBOC3\\bgi");

int x1,y1,x2,y2,xmin,xmax,ymin,ymax,xx1,xx2,yy1,yy2,dx,dy;
float t1,t2,p[4],q[4],temp;

x1=120; y1=120; x2=300; y2=300;


xmin=100; ymin=100; xmax=250; ymax=250;
rectangle(xmin,ymin,xmax,ymax);

setcolor(CYAN);
line(x1,y1,x2,y2); //Given Line...
dx=x2-x1;
dy=y2-y1;
//Value of Pk...
p[0]=-dx;
p[1]=dx;
p[2]=-dy;
p[3]=dy;
//Value of Qk...
q[0]=x1-xmin;
q[1]=xmax-x1;
q[2]=y1-ymin;
q[3]=ymax-y1;

for(i=0;i<4;i++)
{
if(p[i]==0)
{
printf("line is parallel to one of the clipping boundary");
if(q[i]>=0)
{
if(i<2)
{
if(y1<ymin)
{
y1=ymin;
}

if(y2>ymax)
{
y2=ymax;
}
line(x1,y1,x2,y2);
}

if(i>1)
{
if(x1<xmin)
{
x1=xmin;
}

if(x2>xmax)
{
x2=xmax;
}

line(x1,y1,x2,y2);
}
}
}
}

t1=0; //Initial Time…


t2=1; //Final Time…
for(i=0;i<4;i++)
{
temp=q[i]/p[i];
if(p[i]<0)
{
if(t1<=temp)
t1=temp;
}
else
{
if(t2>temp)
t2=temp;
}
}
//Determining clipped Coordinates...
if(t1<t2)
{
xx1 = x1 + t1 * p[1];
xx2 = x1 + t2 * p[1];
yy1 = y1 + t1 * p[3];
yy2 = y1 + t2 * p[3];
setcolor(RED);
line(xx1,yy1,xx2,yy2); //Clipped Line...
}
closegraph();
}

Potrebbero piacerti anche