#define LEFT 1
#define RIGHT 2
#define BOTTOM 4
#define TOP 8
#define XL 150
#define XR 350
#define YB 150
#define YT 300
#include <math.h>
#include "graphics.h"
main()
{
int gdriver=DETECT,gmode;
initgraph(&gdriver,&gmode," ");
setcolor(12);
line(XL,YT,XR,YT);
line(XL,YB,XR,YB);
line(XL,YT,XL,YB);
line(XR,YT,XR,YB);
setcolor(14);
draw_ett();
getch();
closegraph();
}
int encode (int x,int y)
{
int code;
int c;
c=0;
if (x<XL) c=c|LEFT;
else if (x>XR) c=c|RIGHT;
if (y<YB) c=c|BOTTOM;
else if (y>YT) c=c|TOP;
code=c;
return code;
}
draw_ett()
{
int x1,x2,y1,y2,x,y;
int code1,code2,code;
x1=50;y1=250;x2=400; y2=90;
setcolor(2);
line(x1,y1,x2,y2);
code1=encode(x1,y1);
code2=encode(x2,y2);
while ((code1!=0)||(code2!=0))
{
if ((code1&code2)!=0)
return;
code=code1;
if (code1==0)
code=code2;
if ((LEFT&code)!=0)
{
x=XL;y=y1+(y2-y1)*(XL-x1)/(x2-x1);
}
else if ((RIGHT&code)!=0)
{
x=XR;y=y1+(y2-y1)*(XR-x1)/(x2-x1);
}
else if ((BOTTOM&code)!=0)
{
y=YB;x=x1+(x2-x1)*(YB-y1)/(y2-y1);
}
else if ((TOP&code)!=0)
{
y=YT;x=x1+(x2-x1)*(YT-y1)/(y2-y1);
}
if (code==code1)
{
x1=x; y1=y;code1=encode(x,y);
}
else
{
x2=x;y2=y;code2=encode(x,y);
}
}
setcolor(14);
line(x1,y1,x2,y2);
return;
}
Cohen-Surtherland裁剪算法
最新推荐文章于 2023-04-11 22:48:45 发布