[ Index ] |
|
Code source de eGroupWare 1.2.106-2 |
1 /* 2 DynAPI Distribution 3 Bezier Class 4 5 Bezier Algorithm Reference: http://astronomy.swin.edu.au/~pbourke/curves/bezier/ 6 7 The DynAPI Distribution is distributed under the terms of the GNU LGPL license. 8 9 requires: dynapi.fx.Thread 10 */ 11 12 13 function Bezier(cp, n) { 14 var l = cp.length; 15 var p = []; 16 for (var i=0; i<n; i++) p = p.concat(Bezier._plot(cp,i/n)); 17 return p.concat([cp[l-2],cp[l-1]]); 18 } 19 20 Bezier._plot = function (cp, mu) { 21 var n = (cp.length/2)-1; 22 var k,kn,nn,nkn; 23 var blend; 24 var b = [0,0]; 25 26 var muk = 1; 27 var munk = Math.pow(1-mu, n); 28 29 for (k=0;k<=n;k++) { 30 nn = n; 31 kn = k; 32 nkn = n - k; 33 blend = muk * munk; 34 muk *= mu; 35 munk /= (1-mu); 36 while (nn >= 1) { 37 blend *= nn; 38 nn--; 39 if (kn > 1) { 40 blend /= kn; 41 kn--; 42 } 43 if (nkn > 1) { 44 blend /= nkn; 45 nkn--; 46 } 47 } 48 49 b[0] += cp[k*2] * blend; 50 b[1] += cp[k*2+1] * blend; 51 } 52 b[0] = Math.round(b[0]); 53 b[1] = Math.round(b[1]); 54 return b; 55 } 56 57 /*function Bezier3(cp,mu) { 58 var x1=cp[0],y1=cp[1],x2=cp[2],y2=cp[3],x3=cp[4],y3=cp[5]; 59 var mu2 = mu * mu; 60 var mum1 = 1 - mu; 61 var mum12 = mum1 * mum1; 62 var x = Math.round(x1 * mum12 + 2 * x2 * mum1 * mu + x3 * mu2); 63 var y = Math.round(y1 * mum12 + 2 * y2 * mum1 * mu + y3 * mu2); 64 return [x,y]; 65 } 66 67 function Bezier4(cp,mu) { 68 var x1=cp[0],y1=cp[1],x2=cp[2],y2=cp[3],x3=cp[4],y3=cp[5],x4=cp[6],y4=cp[7]; 69 var mum1 = 1 - mu; 70 var mum13 = mum1 * mum1 * mum1; 71 var mu3 = mu * mu * mu; 72 var x = Math.round(mum13*x1 + 3*mu*mum1*mum1*x2 + 3*mu*mu*mum1*x3 + mu3*x4); 73 var y = Math.round(mum13*y1 + 3*mu*mum1*mum1*y2 + 3*mu*mu*mum1*y3 + mu3*y4); 74 return [x,y]; 75 }*/
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
Généré le : Sun Feb 25 17:20:01 2007 | par Balluche grâce à PHPXref 0.7 |