0% found this document useful (0 votes)
16 views

Assignment 2

The document describes a line clipping algorithm that clips a line segment to fit within a specified window. It defines functions to get the outcode of a point and check if it is inside or outside the window boundaries. It uses these functions in a loop to iteratively clip the line segment by calculating the intersection points with the window edges until the entire line is within the window and can be drawn.

Uploaded by

ajitkolpuke
Copyright
© © All Rights Reserved
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
16 views

Assignment 2

The document describes a line clipping algorithm that clips a line segment to fit within a specified window. It defines functions to get the outcode of a point and check if it is inside or outside the window boundaries. It uses these functions in a loop to iteratively clip the line segment by calculating the intersection points with the window edges until the entire line is within the window and can be drawn.

Uploaded by

ajitkolpuke
Copyright
© © All Rights Reserved
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 2

#include<conio.

h>
#include<iostream>
#include<graphics.h>
using namespace std;

static int LEFT=1,RIGHT=2,BOTTOM=4,TOP=8,xmin,ymin,xmax,ymax;

int getcode(int x,int y){


int code = 0;
//Perform Bitwise OR to get outcode
if(y > ymax) code |=TOP;
if(y < ymin) code |=BOTTOM;
if(x < xmin) code |=LEFT;
if(x > xmax) code |=RIGHT;
return code;
}

int main()
{
int gdriver = DETECT,gmode;
initgraph(&gdriver,&gmode," ");
setcolor(WHITE);
cout<<"Enter Enter windows min and max values: ";
cin>>xmin>>ymin>>xmax>>ymax;
rectangle(xmin,ymin,xmax,ymax);
int x1,y1,x2,y2;
cout<<"Enter the endpoints of the line: ";
cin>>x1>>y1>>x2>>y2;
line(x1,y1,x2,y2);
getch();
int outcode1=getcode(x1,y1), outcode2=getcode(x2,y2);
int accept = 0; //decides if line is to be drawn
while(1){
float m =(float)(y2-y1)/(x2-x1);
//Both points inside. Accept line
if(outcode1==0 && outcode2==0)
{
accept = 1;
break;
}
//AND of both codes != 0.Line is outside. Reject line
else if((outcode1 & outcode2)!=0)
{
break;
}
else
{
int x,y;
int temp;
//Decide if point1 is inside, if not, calculate intersection
if(outcode1==0)
temp = outcode2;
else
temp = outcode1;
//Line clips top edge
if(temp & TOP){
x = x1+ (ymax-y1)/m;
y = ymax;
}
else if(temp & BOTTOM){ //Line clips bottom edge
x = x1+ (ymin-y1)/m;
y = ymin;
}else if(temp & LEFT){ //Line clips left edge
x = xmin;
y = y1+ m*(xmin-x1);
}else if(temp & RIGHT){ //Line clips right edge
x = xmax;
y = y1+ m*(xmax-x1);
}
//Check which point we had selected earlier as temp, and replace
its co-ordinates
if(temp == outcode1){
x1 = x;
y1 = y;
outcode1 = getcode(x1,y1);
}else{
x2 = x;
y2 = y;
outcode2 = getcode(x2,y2);
}
}
}
cout<<"After clipping:";
if(accept)
cleardevice();
rectangle(xmin,ymin,xmax,ymax);
setcolor(RED);
line(x1,y1,x2,y2);
getch();
closegraph();
}

You might also like