Guest User

Untitled

a guest
Jul 22nd, 2018
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.08 KB | None | 0 0
  1. function Interpolator(type) {
  2. this._i = type.func;
  3. this._snum = type.samples;
  4. this.s = []; //Samples
  5. };
  6.  
  7. Interpolator.prototype.addSample = function(sample){
  8. var p = this.s;
  9. p.push(sample);
  10. if(p.length > this._snum) p.shift();
  11. };
  12.  
  13. Interpolator.prototype.getValue = function(t){
  14. return this._i(this.s, t);
  15. };
  16.  
  17. Interpolator.Linear = {
  18. samples : 2,
  19. func : function(d,t){
  20. var v1 = d[0],
  21. v2 = d[1];
  22.  
  23. if(!v2) return new Vector(0,0);
  24.  
  25. var r1x = v1.x * (1-t),
  26. r1y = v1.y * (1-t),
  27. r2x = v2.x * t,
  28. r2y = v2.y * t
  29.  
  30. return(new Vector(r1x+r2x,r1y+r2y));
  31. }
  32. };
  33.  
  34. Interpolator.CatmullRom = {
  35. samples : 4,
  36. func : function(d,mu) {
  37. var v0 = d[0],
  38. v1 = d[1],
  39. v2 = d[2],
  40. v3 = d[3],
  41. a0,a1,a2,a3,mu2;
  42.  
  43. if(!v0 || !v1 || !v2 || !v3 || !mu) return new Vector(0,0);
  44.  
  45. mu2 = mu*mu;
  46.  
  47. var a0x = -0.5 * v0.x + 1.5 * v1.x - 1.5 * v2.x + 0.5 * v3.x,
  48. a0y = -0.5 * v0.y + 1.5 * v1.y - 1.5 * v2.y + 0.5 * v3.y,
  49. a1x = v0.x - 2.5 * v1.x + 2 * v2.x - 0.5 * v3.x,
  50. a1y = v0.y - 2.5 * v1.y + 2 * v2.y - 0.5 * v3.y,
  51. a2x = -0.5 * v0.x + 0.5 * v2.x,
  52. a2y = -0.5 * v0.y + 0.5 * v2.y,
  53. a3x = v1.x,
  54. a3y = v1.y,
  55.  
  56. rx = a0x * mu * mu2 + a1x * mu2 + a2x * mu + a3x,
  57. ry = a0y * mu * mu2 + a1y * mu2 + a2y * mu + a3y;
  58.  
  59. return new Vector(rx,ry);
  60. }
  61. };
  62.  
  63. Interpolator.Hermite = {
  64. samples : 4,
  65. func : function(d,mu) {
  66. var v0 = d[0],
  67. v1 = d[1],
  68. v2 = d[2],
  69. v3 = d[3],
  70. bias = 0,
  71. tension = -0.3;
  72.  
  73. if(!v0 || !v1 || !v2 || !v3 || !mu) return new Vector(0,0);
  74.  
  75. var mu2 = mu * mu,
  76. mu3 = mu2 *mu,
  77. bbias = (1+bias),
  78. cbias = (1-bias),
  79. ten = (1-tension),
  80. pb = bbias * ten / 2,
  81. nb = cbias * ten / 2;
  82.  
  83. var m0x = (v1.x-v0.x) * pb,
  84. m0y = (v1.y-v0.y) * pb;
  85.  
  86. m0x += (v2.x-v1.x) * nb;
  87. m0y += (v2.y-v1.y) * nb;
  88.  
  89. var m1x = (v2.x-v1.x) * pb,
  90. m1y = (v2.y-v1.y) * pb;
  91.  
  92. m1x += (v3.x-v2.x) * nb;
  93. m1y += (v3.y-v2.y) * nb;
  94.  
  95. var a0 = 2*mu3 - 3*mu2 + 1,
  96. a1 = mu3 - 2*mu2 + mu,
  97. a2 = mu3 - mu2,
  98. a3 = -2*mu3 + 3*mu2,
  99.  
  100. rx = a0*v1.x + a1*m0x + a2*m1x + a3*v2.x,
  101. ry = a0*v1.y + a1*m0y + a2*m1y + a3*v2.y;
  102.  
  103. return new Vector(rx,ry);
  104. }
  105. };
  106.  
  107. Interpolator.Cubic = {
  108. samples : 4,
  109. func : function(d,mu) {
  110. var v0 = d[0],
  111. v1 = d[1],
  112. v2 = d[2],
  113. v3 = d[3];
  114.  
  115. if(!v0 || !v1 || !v2 || !v3 || !mu) return new Vector(0,0);
  116.  
  117. var mu2 = mu*mu,
  118. a0x = v3.x - v2.x - v0.x + v1.x,
  119. a0y = v3.y - v2.y - v0.y + v1.y,
  120. a1x = v0.x - v1.x - a0x,
  121. a1y = v0.y - v1.y - a0y,
  122. a2x = v2.x - v0.x,
  123. a2y = v2.y - v0.y,
  124. a3x = v1.x,
  125. a3y = v1.y,
  126. rx = a0x * mu * mu2 + a1x * mu2 + a2x * mu + a3x,
  127. ry = a0y * mu * mu2 + a1y * mu2 + a2y * mu + a3y;
  128.  
  129. return new Vector(rx,ry);
  130.  
  131. }
  132. };
Add Comment
Please, Sign In to add comment