XR)
{
c=c|RIGHT;
}
if(yYT)
{
c=c|TOP;
}
*code=c;
}
void C_S_LineClip(float x1,float y1,float x2,float y2,float xl,float xr,float yb,float yt)
{
int code1,code2,code;
float x,y;
XL=xl;
XR=xr;
YB=yb;
YT=yt;
encode(x1,y1,&code1);
encode(x2,y2,&code2);
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;
encode(x1,y1,&code1);
}
else
{
x2=x;
y2=y;
encode(x2,y2,&code2);
}
}
setcolor(5);
line((int)x1,(int)y1,(int)x2,(int)y2);
return;
}
void main()
{
int i,a[100];
int gdriver=VGA, gmode=VGAHI;
initgraph(&gdriver,&gmode,"c:\\tc20\\bgi");
setcolor(6);
line(100,100,500,100);
line(500,100,500,400);
line(500,400,100,400);
line(100,400,100,100);
srand(time(0));
for(i=0;i<100;i++)
a[i]=rand()%600;
for(i=0;i<25;i++)
{
setcolor(2);
line(a[4*i+0],a[4*i+1],a[4*i+2],a[4*i+3]);
C_S_LineClip(a[4*i+0],a[4*i+1],a[4*i+2],a[4*i+3],100,500,100,400);
}
getch();
closegraph();
(4) }实验结果
实验总结:
通过本次实验本人掌握常用图形程序设计、菜单设计等方法和编程实现编码裁剪算法,得出相应的输出图形;
编码裁剪算法的原理很简单,主要是确定裁剪的点,就很容易实现实验内容。
实验评语:
实验成绩
教师签名