Cohen-Sutherland Line Clipping Algorithm

Cohen-Sutherland Line Clipping

It is one of the most popular line-clipping algorithms. The concept of assigning 4-bit region codes to the endpoints of a line and subsequent checking and operation of the endpoint codes to determine totally visible lines and invisible lines (lying completely at one side of the clip window externally). Cohen-Sutherland Line Clipping Algorithm was originally introduced by Danny Cohen and Ivan Sutherland.

Cohen-Sutherland Line Clipping Algorithm
For clipping other invisible lines and partially visible lines, the algorithm breaks the line segments into smaller subsegments by finding intersections with appropriate window edges. For a pair of a non-zero endpoint and an intersection point, the corresponding subsegment is checked for two primary visibility states as done in the earlier steps. The process is repeated till two visible intersections are found or no intersection with any of the four visible window edges is found. Thus this algorithm cleverly reduces the number of intersection calculations.

Steps of Cohen-Sutherland Line Clipping Algorithm

1. Input: x1, xR, yT, yB, P1(x1, y1), P2(x2, y2)

Initialize i=1
while i<=2


i=i+1
end while
i=1

2. Intialize j=1

while j<=2


3. if codes of P1 and P2 are both equal to zero then draw P1P2 (Totally Visible)
4. if logical intersection or AND operation of code - P1 and code -P2 is not equal to zero then ignore P1P2 (Totally invisible)
5. if code -P1=0 then swap P1 and P2 along with their flags and set i=1
6. if code - P1< >0 then
for i=1
{
if C1 left=1 then
find interaction (xL, y'L) with left edge
assign code to (xL, y'L)
P1=(xL, y'L)
end if
i=i+1
go to 3
}
for i=2
{
if C1 right=1 then
find interaction (xR, y'R) with right edge
assign code to (xR, y'R)
P1=(xR, y'R)
end if
i=i+1
go to 3
}
for i=3
{
if C1 bottom=1 then
find interaction (x'B, yB) with bottom edge
assign code to (x'B, yB)
P1=(x'B, yB)
end if
i=i+1
go to 3
}
for i=4
{
if C1 top=1 then
find interaction (x'T, yT) with top edge
assign code to (x'T, yT)
P1=(x'T, yT)
end if
i=i+1
go to 3
}
end