Всем, кого достали кривые Безье, посвящается... Написано коряво, но более-менее работает

Код HTML:
MovieClip.prototype.drawBezier = function(POINTS){
ANGLE = new Array();
for(i_=0;i_<POINTS.length;i_++){
cPx = POINTS[i_].x;
cPy = POINTS[i_].y;
if(POINTS[i_+1]!=undefined){
cPNx = POINTS[i_+1].x;
cPNy = POINTS[i_+1].y;
} else{
cPNx = POINTS[i_].x;
cPNy = POINTS[i_].y;
}
if(POINTS[i_-1]!=undefined){
cPPx = POINTS[i_-1].x;
cPPy = POINTS[i_-1].y;
} else{
cPPx = POINTS[i_].x;
cPPy = POINTS[i_].y;
}
Points = [{x:cPPx,y:cPPy},{x:cPx,y:cPy},{x:cPNx,y:cPNy}];
d1 = Math.sqrt(Math.pow(Points[0].x - Points[1].x,2) + Math.pow(Points[0].y - Points[1].y,2));
d2 = Math.sqrt(Math.pow(Points[2].x - Points[1].x,2) + Math.pow(Points[2].y - Points[1].y,2));
if(d2!=0){
xc = Points[1].x + (d1/d2)*(Points[2].x-Points[1].x);
yc = Points[1].y + (d1/d2)*(Points[2].y-Points[1].y);
} else {
xc = Points[1].x;
yc = Points[1].y;
}
angle = Math.atan2(yc - Points[0].y,xc - Points[0].x);
ANGLE.push(angle);
}
for(i_=0;i_<POINTS.length-1;i_++){
cPx = POINTS[i_].x;
cPy = POINTS[i_].y;
if(POINTS[i_+1]!=undefined){
cPNx = POINTS[i_+1].x;
cPNy = POINTS[i_+1].y;
} else{
cPNx = POINTS[i_].x;
cPNy = POINTS[i_].y;
}
if(POINTS[i_-1]!=undefined){
cPPx = POINTS[i_-1].x;
cPPy = POINTS[i_-1].y;
} else{
cPPx = POINTS[i_].x;
cPPy = POINTS[i_].y;
}
rad = Math.sqrt(Math.pow(cPx - cPNx,2)+Math.pow(cPy - cPNy,2))/5;
Points = [{x:cPPx,y:cPPy},{x:cPx,y:cPy},{x:cPNx,y:cPNy}];
C1x = Points[1].x + rad*Math.cos(ANGLE[i_]);
C2x = cPNx - rad*Math.cos(ANGLE[i_+1]);
C1y = Points[1].y + rad*Math.sin(ANGLE[i_]);
C2y = cPNy - rad*Math.sin(ANGLE[i_+1]);
t = 0;
this.moveTo(cPx,cPy);
while(t<1){
t+=0.01;
coeff1 = Math.pow(1-t,3);
coeff2 = 3*Math.pow(1-t,2)*t;
coeff3 = 3*(1-t)*Math.pow(t,2);
coeff4 = Math.pow(t,3);
rx = coeff1*cPx+coeff2*C1x+coeff3*C2x+coeff4*cPNx;
ry = coeff1*cPy+coeff2*C1y+coeff3*C2y+coeff4*cPNy;
this.lineTo(rx,ry);
}
}
this.lineStyle(5,0x3366CC,100);
for(i_=0;i_<POINTS.length;i_++){
this.moveTo(POINTS[i_].x,POINTS[i_].y);
this.lineTo(POINTS[i_].x+1,POINTS[i_].y);
}
}
_root.onMouseUp = function(){
_root.createEmptyMovieClip("lc",1);
L = new Array();
for(i=0;i<10;i++)
L.push({x:Math.random()*550,y:Math.random()*400});
_root["lc"].lineStyle(1,0x707070,100);
_root["lc"].drawBezier(L);
}
Прикол в отсутствии касательных и проочего - интерполирование, мля
