- /*三次样条法*/
- void parspl(int p[][2],int n,int k)
- {
- int i,j;
- float t1,t2,t3,t,a,b,c,d,x,y;
- p[0][0]=p[1][0];p[0][1]=p[1][1];
- p[n+1][0]=p[n][0];p[n+1][1]=p[n][1];
- t=0.5/k;
- moveto(p[1][0],p[1][1]+D);
- for(i=0;i<n-1;i++)
- {
- for(j=1;j<k;j++)
- {
- t1=j*t;
- t2=t1*t1;
- t3=t2*t1;
- a=4*t2-t1-4*t3;
- b=1-10*t2+12*t3;
- c=t1+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,15);
- }
- }
- lineto(p[i+2][0],p[i+2][1],15);
- }
复制代码 |