计算机图形学实验报告实验裁剪算法实验

一、实验目的:

直线段的裁剪:编码裁剪算法,中点分割裁剪算法。

二、实验内容:

//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);}

}

p1.x=x1;p1.y=y1;p2.x=x2;p2.y=y2;

}

int IsInArea(POINT point,int XL,int XR,int YB,int YT)

{

//请将此程序补充完整

if(point.x>=XL && point.x<=XR && point.y>YB && point.y

else return 0;

}

int NotIntersect(POINT begin,POINT end,int XL,int XR,int YB,int YT)

{

//请将此程序补充完整

int maxx,maxy,minx,miny;

maxx=(begin.x>end.x)?begin.x:end.x;

minx=(begin.x

maxy=(begin.y>end.y)?begin.y:end.y;

miny=(begin.y

if(maxxXR||maxyYT) return 1;

else return 0;

}

//中点裁剪算法:

POINT ClipMid(POINT begin,POINT end,int XL,int XR,int YB,int YT)

{

//请将此程序补充完整

POINT mid,temp;

if(IsInArea(begin,XL,XR,YB,YT)) temp=begin;

else if(NotIntersect(begin,end,XL,XR,YB,YT)) temp=begin;

else

{

mid.x=(begin.x+end.x)/2;mid.y=(begin.y+end.y)/2;

if(abs(mid.x-end.x)<=1&& abs(mid.y-end.y)<=1) t

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐