/* © Ivan Dembicki, 2004, dembicki@narod.ru please check updates: http://www.dembicki.org Path class version 1.2 (version 1.1 available here: http://www.dembicki.org/Path.as.1.1) */ class org.dembicki.Path { var path_points:String = "", path_length:Number = 0; var segments:Number = 0; private var ln_array:Array = []; function Path() { var arg = typeof arguments[0] == "number" ? arguments : arguments[0]; this.path_points=arg.toString(), this.path_length=0; var k = 0, i; var len = arg.length; var x0 = arg[0] || 0, y0 = arg[1] || 0, x1, y1, x2, y2, ln, o, a1, a2, a3, a4, a, b, c, d, e, a2t, sa; for (i=2; ipoz) { ff = (poz-(len-ln[4]))/ln[4]; break; } } var fn = function (ff) { var o = ln[3], a1 = o.a1, a2 = o.a2, a3 = o.a3, a4 = o.a4, a = o.a, b = o.b, c = o.c, e = o.e, i = 1, st = 1, f_l = ln[4], t_l = ff*f_l, max_i = 100, d, sa, a2i; while (max_i--) { d=Math.sqrt(c+i*(b+a*i)), sa=Math.sqrt(a), a2i=a*2*i, f_l=(2*sa*(d*(b+a2i)-e*b)+(b*b-4*a*c)*(Math.log(2*e+b/sa)-Math.log(2*d+(b+a2i)/sa)))/(8*Math.pow(a, (3/2))); if (Math.abs(f_l-t_l)<.000001) { return i; } st /= 2, i += f_lt_l ? -st : 0; } return i; }; var f = fn(ff), p0 = ln[0], p1 = ln[1], p2 = ln[2], e = 1-f, ee = e*e, ff = f*f, b = 2*f*e; return omit_rotation ? {_x:p2._x*ff+p1._x*b+p0._x*ee, _y:p2._y*ff+p1._y*b+p0._y*ee} : {_x:p2._x*ff+p1._x*b+p0._x*ee, _y:p2._y*ff+p1._y*b+p0._y*ee, _rotation:Math.atan2(p0._y-p1._y+(2*p1._y-p0._y-p2._y)*f, p0._x-p1._x+(2*p1._x-p0._x-p2._x)*f)/(Math.PI/180)}; } }