for (i=1;i<n;i++)
{
//a[i][0]-=a[i-1][1];//equal to 0
a[i][1]-=a[i-1][2];
a[i][3]-=a[i-1][3];
a[i][4]-=a[i-1][4];
for (j=4;j>=1;j--) a[i][j]/=a[i][1];
}
for (i=n-2;i>=0;i--) for (j=3;j<5;j++) a[i][j]-=a[i][2]*a[i+1][j];
// 求解
int x,y;
if (!_MoveTo(pn->x,pn->y)) throw(8);
for(i=0;i<n-1;i++)
{
y=pn[i+1].y-pn[i].y;
if (y<0) y=-y;
y+=1;
d=y*y;
y=pn[i+1].x-pn[i].x;
if (y<0) y=-y;
y+=1;
d=sqrt(d+y*y);
dt=1/d;
x=int(Fh1*pn[i].x+Fh2*pn[i+1].x+Fh3*a[i][3]+Fh4*a[i+1][3]);
y=int(Fh1*pn[i].y+Fh2*pn[i+1].y+Fh3*a[i][4]+Fh4*a[i+1][4]);
if (!_LineTo(x,y)) throw(8);
}
}
if (!_LineTo(pn[i].x,pn[i].y)) throw(8);
if (bClose)
{
y=pn[0].y-pn[i].y;
if (y<0) y=-y;
y+=1;
d=y*y;
y=pn[0].x-pn[i].x;
if (y<0) y=-y;
y+=1;
d=sqrt(d+y*y);
dt=1/d;
for(t=0;t<=1;t+=dt)
{
t2=t*t;
t3=t2*t;