计算机图形学程序TC扫描线算法.docx
《计算机图形学程序TC扫描线算法.docx》由会员分享,可在线阅读,更多相关《计算机图形学程序TC扫描线算法.docx(8页珍藏版)》请在冰豆网上搜索。
![计算机图形学程序TC扫描线算法.docx](https://file1.bdocx.com/fileroot1/2023-2/1/c4772a7f-2c19-4dc7-b973-6a7b28122462/c4772a7f-2c19-4dc7-b973-6a7b281224621.gif)
计算机图形学程序TC扫描线算法
计算机图形学程序——扫描线算法
#include
#include
#include
#include
#include
#include
voidparspl(intp[10000][2],longn,intprecision,intcolor)
{
intx=0,y=0,i=0,j=0,m=0;
doublet2=0,t3=0,t=0,a,b,c,d,e=p[1][0]+5,f=p[1][1]+5;
setcolor(color);
m=n+1;
p[0][0]=p[n][0];
p[0][1]=p[n][1];
p[m][0]=p[1][0];
p[m][1]=p[1][1];
p[m+1][0]=p[2][0];
p[m+1][1]=p[2][1];
moveto(p[1][0],p[1][1]);
for(i=0;i{
t=0.5/precision;
for(j=1;j{
t2=t*t;
t3=t2*t;
a=4*t2-t-4*t3;
b=1-10*t2+12*t3;
c=t+8*t2-12*t3;
d=4*t3-2*t2;
x=a*p[i][0]+b*p[i+1][0]+c*p[i+2][0]+d*p[i+3][0];
y=a*p[i][1]+b*p[i+1][1]+c*p[i+2][1]+d*p[i+3][1];
lineto(x,y);
line(e,f,x+5,y+5);
moveto(x,y);
t+=0.5/precision;
e=x+5;
f=y+5;
}
lineto(p[i+2][0],p[i+2][1]);
moveto(e,f);
lineto(p[i+2][0]+5,p[i+2][1]+5);
moveto(p[i+2][0],p[i+2][1]);
}
}
intmain()
{
longn=5;
charpwd[4];
intp[100][2];
inta1,a2,b1,b2,c1,c2,d1,d2,e1,e2;
intgdriver=VGA,gmode=VGAHI;
initgraph(&gdriver,&gmode,"c:
\\tc");
setbkcolor(0);
a1=p[1][0]=320;
a2=p[1][1]=240;
b1=p[2][0]=320;
b2=p[2][1]=120;
c1=p[3][0]=452;
c2=p[3][1]=128;
d1=p[4][0]=382;
d2=p[4][1]=388;
e1=p[5][0]=364;
e2=p[5][1]=280;
loop:
if(a1<=p[1][0]&&p[1][0]<=520)
{
a1=p[1][0];
p[1][0]+=1;
}
else
{
if(p[1][0]>=120)
{
a1=p[1][0];
p[1][0]-=1;
}
else
a1=p[1][0]=120;
}
if(a2>=p[1][1]&&p[1][1]>=60)
{
a2=p[1][1];
p[1][1]-=2;
}
else
{
if(p[1][1]<=420)
{
a2=p[1][1];
p[1][1]+=2;
}
else
a2=p[1][1]=420;
}
if(b1>=p[2][0]&&p[2][0]>=120)
{
b1=p[2][0];
p[2][0]-=2;
}
else
{
if(p[2][0]<=520)
{
b1=p[2][0];
p[2][0]+=2;
}
else
b1=p[2][0]=520;
}
if(b2<=p[2][1]&&p[2][1]<=420)
{
b2=p[2][1];
p[2][1]+=1;
}
else
{
if(p[2][1]>=60)
{
b2=p[2][1];
p[2][1]-=1;
}
else
b2=p[2][1]=60;
}
if(c1<=p[3][0]&&p[3][0]<=520)
{
c1=p[3][0];
p[3][0]+=1;
}
else
{
if(p[3][0]>=120)
{
c1=p[3][0];
p[3][0]-=1;
}
else
c1=p[3][0]=120;
}
if(c2<=p[3][1]&&p[3][1]<=420)
{
c2=p[3][1];
p[3][1]+=1;
}
else
{
if(p[3][1]>=60)
{
c2=p[3][1];
p[3][1]-=1;
}
else
c2=p[3][1]=60;
}
if(d1>=p[4][0]&&p[4][0]>=120)
{
d1=p[4][0];
p[4][0]-=1;
}
else
{
if(p[4][0]<=520)
{
d1=p[4][0];
p[4][0]+=1;
}
else
d1=p[4][0]=520;
}
if(d2>=p[4][1]&&p[4][1]>=60)
{
d2=p[4][1];
p[4][1]-=1;
}
else
{
if(p[4][1]<=420)
{
d2=p[4][1];
p[4][1]+=1;
}
else
d2=p[4][1]=420;
}
if(e1<=p[5][0]&&p[5][0]<=520)
{
e1=p[5][0];
p[5][0]+=1;
}
else
{
if(p[5][0]>=120)
{
e1=p[5][0];
p[5][0]-=1;
}
else
e1=p[5][0]=120;
}
if(e2<=p[5][1]&&p[5][1]<=420)
{
e2=p[5][1];
p[5][1]+=2;
}
else
{
if(p[5][1]>=60)
{
e2=p[5][1];
p[5][1]-=2;
}
else
e2=p[5][1]=60;
}
parspl(p,n,100,4);
parspl(p,n,100,4);
if(bioskey
(1)>0)
{
printf("PleaseInputPassword:
");
gets(pwd);
if(!
strcmp(pwd,"cmy"))
{
clearviewport();
closegraph();
return1;
}
}
cleardevice();
gotoloop;
}