⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 caijian.txt

📁 在TC环境下实现圆的生成与直线的裁减和DDA算法生成直线!
💻 TXT
字号:
clip_a_line(x1,y1,x2,y2,xw_min,yw_min,xw_max,yw_max)
int x1,y1,x2,y2,xw_min,yw_min,xw_max,yw_max;
{
int i,code1[4],code2[4],done,display;
float m;
int x11,x22,y11,y22,mark;
done=0;
display=0;
while(done==0)
{x11=x1;x22=x2;y11=y1;y22=y2;
encode(x1,y1,code1,xw_min,yw_min,xw_max,yw_max);
encode(x2,y2,code2,xw_min,yw_min,xw_max,yw_max);
if(accept(code1,code2))
{
done=1;
display=1;
break;
}
else if(reject(code1,code2))
{
done=1;
break;
}
mark=swap_if_needed(code1,code2);
if(mark==1)
{
x1=x22;
x2=x11;
y1=y22;
y2=y11;
}
if(x2==x1)
m=-1;
else m=(float)(y2-y1)/(float)(x2-x1);
if(code1[0])
{
x1+=(yw_min-y1)/m;
y1=yw_min;
}
else if(code1[1])
{
x1-=(y1-yw_max)/m;
y1=yw_max;
}
else if(code1[2])
{
y1-=(-xw_min+x1)*m;
x1=xw_min;
}
else if(code1[3])
{
y1+=(xw_max-x1)*m;
x1=xw_max;
}
}
if(display==1)
line(x1,y1,x2,y2);
}

encode(x,y,code,xw_min,yw_min,xw_max,yw_max)
int x,y,code[4],xw_min,yw_min,xw_max,yw_max;
{
int i;
for(i=0;i<4;i++)
code[i]=0;
if(x<xw_min)
code[2]=1;
else if(x>xw_max)
code[3]=1;
if(y>yw_max)
code[1]=1;
else if(y<yw_min)
code[0]=1;
}

accept(code1,code2)
int code1[4],code2[4];
{
int i,flag;
flag=1;
for(i=0;i<4;i++)
if((code1[i]==1)||(code2[i]==1))
{
flag=0;
break;
}
return(flag);
}

reject(code1,code2)
int code1[4],code2[4];
{
int i,flag;
flag=0;
for(i=0;i<4;i++)
if((code1[i]==1)&&(code2[i]==1))
{
flag=1;
break;
}
return(flag);
}

swap_if_needed(code1,code2)
int code1[4],code2[4];
{
int i,flag1,flag2,tmp;
flag1=1;
for(i=0;i<4;i++)
if(code1[i]==1)
{
flag1=0;
break;
}
flag2=1;
for(i=0;i<4;i++)
if(code2[i]==1)
{
flag1=0;
break;
}
flag2=1;
for(i=0;i<4;i++)
if(code2[i]==1)
{
flag2=0;
break;
}
if((flag1==0)&&(flag2==0))
return(0);
if((flag1==1)&&(flag2==0))
{
for(i=0;i<4;i++)
{
tmp=code1[i];
code1[i]=code2[i];
code2[i]=tmp;
}
return(1);
}
return(0);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -