计算机图形学实验报告 裁剪,计算机图形学实验报告实验裁剪算法实验.doc
计算机图形学实验报告实验裁剪算法实验
一、实验目的:
直线段的裁剪:编码裁剪算法,中点分割裁剪算法。
二、实验内容:
//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
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐




所有评论(0)