Interpolations.js 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. /**
  2. * Bezier Curves formulas obtained from
  3. * http://en.wikipedia.org/wiki/Bézier_curve
  4. */
  5. function CatmullRom( t, p0, p1, p2, p3 ) {
  6. const v0 = ( p2 - p0 ) * 0.5;
  7. const v1 = ( p3 - p1 ) * 0.5;
  8. const t2 = t * t;
  9. const t3 = t * t2;
  10. return ( 2 * p1 - 2 * p2 + v0 + v1 ) * t3 + ( - 3 * p1 + 3 * p2 - 2 * v0 - v1 ) * t2 + v0 * t + p1;
  11. }
  12. //
  13. function QuadraticBezierP0( t, p ) {
  14. const k = 1 - t;
  15. return k * k * p;
  16. }
  17. function QuadraticBezierP1( t, p ) {
  18. return 2 * ( 1 - t ) * t * p;
  19. }
  20. function QuadraticBezierP2( t, p ) {
  21. return t * t * p;
  22. }
  23. function QuadraticBezier( t, p0, p1, p2 ) {
  24. return QuadraticBezierP0( t, p0 ) + QuadraticBezierP1( t, p1 ) +
  25. QuadraticBezierP2( t, p2 );
  26. }
  27. //
  28. function CubicBezierP0( t, p ) {
  29. const k = 1 - t;
  30. return k * k * k * p;
  31. }
  32. function CubicBezierP1( t, p ) {
  33. const k = 1 - t;
  34. return 3 * k * k * t * p;
  35. }
  36. function CubicBezierP2( t, p ) {
  37. return 3 * ( 1 - t ) * t * t * p;
  38. }
  39. function CubicBezierP3( t, p ) {
  40. return t * t * t * p;
  41. }
  42. function CubicBezier( t, p0, p1, p2, p3 ) {
  43. return CubicBezierP0( t, p0 ) + CubicBezierP1( t, p1 ) + CubicBezierP2( t, p2 ) +
  44. CubicBezierP3( t, p3 );
  45. }
  46. export { CatmullRom, QuadraticBezier, CubicBezier };
粤ICP备19079148号