裁剪算法实验
一、 实验目的:
直线段的裁剪:编码裁剪算法,中点分割裁剪算法。
二、实验内容:
//BasicGraph.cpp
//请将下列裁剪程序补充完整,并用注释说明是何种裁剪算法
void Encode (int x,int y,int *code,int XL,int XR,int YB,int YT) {
//请将此程序补充完整
int c=0;
if(x
else if(x>XR) c=c|RIGHT;
if(y
else if(y>YT) c=c|TOP;
(*code)=c;
}
//编码裁剪算法:
void C_S_Line(POINT &p1,POINT &p2,int XL,int XR,int YB,int YT) {
//请将此程序补充完整
int x1,x2,y1,y2,x,y,code1,code2,code;
x1=p1.x; x2=p2.x; y1=p1.y; y2=p2.y;
Encode(x1,y1,&code1,XL,XR,YB,YT);
Encode(x2,y2,&code2,XL,XR,YB,YT);
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);}
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;Encode(x,y,&code1,XL,XR,YB,YT);}
else
{x2=x;y2=y;Encode(x,y,&code2,XL,XR,YB,YT);}
}