This program is for implementing Cohen-Sutherland Line Clipping. This is a part of Mumbai University MCA Colleges Computer Graphics CG MCA Sem 2
Hope this Program is useful to you in some sense or other. Keep on following this blog for more Mumbai University MCA College Programs. Happy Programming and Studying.
#include<conio.h>
#include<stdio.h>
#include<graphics.h>
#include<math.h>
typedef unsigned char BYTE;
BYTE pointcheck(int x, int y);
BYTE bit1check(int p);
BYTE bit2check(int p);
BYTE bit3check(int p);
BYTE bit4check(int p);
int endprog(void);
int main (void)
{
int
gd=VGA,gm=VGAHI;
float
x,y,xmin,ymin,xmax,ymax,xn1,xn2,yn1,yn2,x1,y1,x2,y2, m;
int
bit1,bit2,bit3,bit4, p1,p2, pointcount = 0;
initgraph(&gd,
&gm, "c:\\tc\\bgi");
xmax = 540;
ymax = 380; xmin = 100; ymin = 100;
printf("Enter
start point :");
scanf("%f
%f",&x1, &y1);
printf("Enter
end point :");
scanf("%f
%f",&x2, &y2);
setcolor(1);
rectangle(xmin,ymin,xmax,ymax);
setcolor(2);
line(x1,y1,x2,y2);
m =
(y2-y1)/(x2-x1);
p1 =
pointcheck(x1,y1);
p2 =
pointcheck(x2,y2);
bit1=bit1check(p1);
bit2=bit2check(p1);
bit3=bit3check(p1);
bit4=bit4check(p1);
printf("Point
p1 is %d = %d%d%d%d",p1,bit4,bit3,bit2,bit1);
bit1=bit1check(p2);
bit2=bit2check(p2);
bit3=bit3check(p2);
bit4=bit4check(p2);
printf("\nPoint
p2 is %d = %d%d%d%d",p2,bit4,bit3,bit2,bit1);
if
(bit1check(p1)&bit1check(p2)==1) endprog();
if
(bit2check(p1)&bit2check(p2)==1) endprog();
if
(bit3check(p1)&bit3check(p2)==1) endprog();
if
(bit4check(p1)&bit4check(p2)==1) endprog();
if(p1 == 0
& p2 == 0)
{
printf("\nLine
lies within the window");
getch();
return
0;
}
else
printf("\nClipping......");
if
(pointcheck(x1,y1)==0)
{
xn1
= x1; yn1 = y1;
pointcount
= pointcount + 1;
p1
= p2;
}
if
(bit1check(p1) == 1)
{
x
= xmin;
y
= y1 + m * (xmin - x1);
putpixel(x,y,3);
setcolor(3);
circle(x,y,4);
if
(pointcount > 0)
xn2
= x; yn2 = y;
else
{
xn1
= x; yn1 = y;
pointcount
= pointcount +1;
}
p1
= p2;
}
if
(bit2check(p1) == 1)
{
x
= xmax;
y
= y1 + m * (xmax - x1);
putpixel(x,y,3);
setcolor(3);
circle(x,y,4);
if
(pointcount > 0)
xn2
= x; yn2 = y;
else
{
xn1
= x; yn1 = y;
pointcount
= pointcount + 1;
}
p1
= p2;
}
if
(bit3check(p1) == 1) //it crosses ymin
{
y
= ymin;
x
= x1 + (ymin - y1)/m;
putpixel(x,y,3);
setcolor(3);
circle(x,y,4);
if
(pointcount > 0)
xn2
= x; yn2 = y;
else
{
xn1
= x; yn1 = y;
pointcount
= pointcount + 1;
}
p1
= p2;
}
if
(bit4check(p1) == 1) //it crosses ymax
{
y
= ymax;
x
= x1 + (ymax - y1)/m;
putpixel(x,y,3);
setcolor(3);
circle(x,y,4);
if
(pointcount > 0)
xn2
= x; yn2 = y;
else
{
xn1
= x; yn1 = y;
pointcount
= pointcount + 1;
}
}
getch();
setcolor(0);
line
(x1,y1,x2,y2);
setcolor(4);
line
(xn1,yn1,xn2,yn2);
getch();
closegraph();
}
int endprog(void)
{
printf("\nLine
lies outside the window");
getch();
closegraph();
return 0;
}
BYTE pointcheck(int x, int y)
{
int
val=0x00;
if ((x -
100) < 0) val = val|0x01; //make
bit 1 --> 1
if ((540 -
x) < 0) val = val|0x02; //make
bit 2 --> 1
if ((y -
100) < 0) val = val|0x04; //make
bit 3 --> 1
if ((380 -
y) < 0) val = val|0x08; //make
bit 4 --> 1
return val;
}
BYTE bit1check(int a)
{
a = a &
1; //AND operation with 0001,
making 2,3,4 bit 0
return a;
}
BYTE bit2check(int b)
{
b = b &
2; //AND with 0010 i.e making 1,3,4
bit 0
b = b
>> 1; //Right shift by 1 bit
i.e cutting last digit
return b;
}
BYTE bit3check(int c)
{
c = c &
4; //AND with 0100 i.e making 1,2,4
bit 0
c = c
>> 2; //Right shift 2 dights i.e cutting last two digit
return c;
}
BYTE bit4check(int d)
{
d = d
>> 3; //Right shift 3 dights i.e cutting last three digit
return d;
}Hope this Program is useful to you in some sense or other. Keep on following this blog for more Mumbai University MCA College Programs. Happy Programming and Studying.
No comments:
Post a Comment