Welcome, guest! Login / Register - Why register?
Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so just use oauth login instead. :)

Paste

Pasted as Plain Text by cohen ( 14 years ago )
AIM : TO IMPLEMENT COHEN SUTHERLAND ALGORITHM
PROGRAM :
#include<iostream.h>
#include<stdio.h>
#include<graphics.h>
#include<conio.h>

typedef unsigned int outcode;
enum { TOP=0x1, BOTTOM=0x2, RIGHT=0x4, LEFT=0x8 };
int calcode (float x,float y,float xwmin,float ywmin,float xwmax,float ywmax);
void lineclip(float x0,float y0,float x1,float y1,float xwmin,float ywmin,float xwmax,float ywmax )
{
//float x0,y0,x1,y1,xwmin,ywmin,xwmax,ywmax;
int gd,gm;
int code0,code1,codeout;
outcode accept = 0, done=0;

code0 = calcode(x0,y0,xwmin,ywmin,xwmax,ywmax);
code1 = calcode(x1,y1,xwmin,ywmin,xwmax,ywmax);

do{
if(!(code0 | code1))
{ accept =1 ; done =1; }
else
if(code0 & code1) done = 1;
else
{
float x,y;
codeout = code0 ? code0 : code1;
if(codeout & TOP)
{
x = x0 + (x1-x0)*(ywmax-y0)/(y1-y0);
y = ywmax;
}
else
if( codeout & BOTTOM)
{
x = x0 + (x1-x0)*(ywmin-y0)/(y1-y0);
y = ywmin;
}
else
if ( codeout & RIGHT)
{
y = y0+(y1-y0)*(xwmax-x0)/(x1-x0);
x = xwmax;
}
else
{
y = y0 + (y1-y0)*(xwmin-x0)/(x1-x0);
x = xwmin;
}
if( codeout == code0)
{
x0 = x; y0 = y;
code0=calcode(x0,y0,xwmin,ywmin,xwmax,ywmax);
}
else
{
x1 = x; y1 = y;
code1 = calcode(x1,y1,xwmin,ywmin,xwmax,ywmax);
}
}
} while( done == 0);

if(accept) line(x0,y0,x1,y1);

rectangle(xwmin,ywmin,xwmax,ywmax);

getch();

}


int calcode (float x,float y,float xwmin,float ywmin,float xwmax,float ywmax)
//float x,y,xwmin,ywmin,xwmax,ywmax;
{
int code =0;

if(y> ywmax)
code |=TOP;
else if( y<ywmin)
code |= BOTTOM;
else if(x > xwmax)
code |= RIGHT;
else if ( x< xwmin)
code |= LEFT;

return(code);
}


void main()
{

float x2,y2,x1,y1,xwmin,ywmin,xwmax,ywmax;
int gd=DETECT,gm;

clrscr();
initgraph(&gd;,&gm;,"e:\\tc\\bgi");

cout<<"\n\n\tEnter the co-ordinates of Line :";

cout<<"\n\n\tX1 Y1 : ";
cin>>x1>>y1;

cout<<"\n\n\tX2 Y2 : ";
cin>>x2>>y2;


cout<<"\n\tEnter the co_ordinates of window :\n ";
cout<<"\n\txwmin , ywmin : ";
cin>>xwmin>>ywmin;
cout<<"\n\txwmax , ywmax : ";
cin>>xwmax>>ywmax;
clrscr();
line(x1,y1,x2,y2);


















rectangle(xwmin,ywmin,xwmax,ywmax);
getch();
clrscr();


lineclip(x1,y1,x2,y2,xwmin,ywmin,xwmax,ywmax );
getch();
closegraph();

}

 

Revise this Paste

Your Name: Code Language: