bezierutils.js
1.19 KB
//>>built
define(["./_base"],function(k){k=k.bezierutils={};k.tAtLength=function(a,b){var c=0,d=6==a.length,l=0,f=0,q=d?r:v,n=function(e,g){for(var m=0,h=0;h<e.length-2;h+=2)m+=p(e[h],e[h+1],e[h+2],e[h+3]);h=d?p(a[0],a[1],a[4],a[5]):p(a[0],a[1],a[6],a[7]);m-h>g||l+m>b+g?(++f,e=q(e,.5),n(e[0],g),Math.abs(l-b)<=g||n(e[1],g)):(l+=m,c+=1/(1<<f))};b&&n(a,.5);return c};var u=k.computeLength=function(a){for(var b=6==a.length,c=0,d=0;d<a.length-2;d+=2)c+=p(a[d],a[d+1],a[d+2],a[d+3]);d=b?p(a[0],a[1],a[4],a[5]):p(a[0],
a[1],a[6],a[7]);.1<c-d&&(a=b?r(a,.5):t(a,.5),c=u(a[0],b),c+=u(a[1],b));return c},p=k.distance=function(a,b,c,d){return Math.sqrt((c-a)*(c-a)+(d-b)*(d-b))},r=function(a,b){var c=1-b,d=c*c,l=b*b,f=a[0],q=a[1],n=a[2],e=a[3],g=a[4];a=a[5];var m=d*f+2*c*b*n+l*g,d=d*q+2*c*b*e+l*a;return[[f,q,c*f+b*n,c*q+b*e,m,d],[m,d,c*n+b*g,c*e+b*a,g,a]]},t=function(a,b){var c=1-b,d=c*c,l=d*c,f=b*b,q=f*b,n=a[0],e=a[1],g=a[2],m=a[3],h=a[4],k=a[5],p=a[6];a=a[7];var r=l*n+3*d*b*g+3*c*f*h+q*p,l=l*e+3*d*b*m+3*c*f*k+q*a;return[[n,
e,c*n+b*g,c*e+b*m,d*n+2*c*b*g+f*h,d*e+2*c*b*m+f*k,r,l],[r,l,d*g+2*c*b*h+f*p,d*m+2*c*b*k+f*a,c*h+b*p,c*k+b*a,p,a]]},v=k.splitBezierAtT=function(a,b){return 6==a.length?r(a,b):t(a,b)};return k});