- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
/*
* Tween.js - Licensed under the MIT license
* https://github.com/tweenjs/tween.js
*/
/**
* Interpolation Function :<br>
* <p>
* Interpolation.Linear<br>
* Interpolation.Bezier<br>
* Interpolation.CatmullRom
* </p>
* @public
* @constant
* @enum {Function}
* @name Interpolation
* @memberof Tween
*/
export let Interpolation = {
/** @ignore */
Linear: function (v, k) {
let m = v.length - 1, f = m * k, i = Math.floor(f), fn = Interpolation.Utils.Linear;
if (k < 0) return fn(v[ 0 ], v[ 1 ], f);
if (k > 1) return fn(v[ m ], v[ m - 1 ], m - f);
return fn(v[ i ], v[ i + 1 > m ? m : i + 1 ], f - i);
},
/** @ignore */
Bezier: function (v, k) {
let b = 0, n = v.length - 1, pw = Math.pow, bn = Interpolation.Utils.Bernstein, i;
for (i = 0; i <= n; i++) {
b += pw(1 - k, n - i) * pw(k, i) * v[ i ] * bn(n, i);
}
return b;
},
/** @ignore */
CatmullRom: function (v, k) {
let m = v.length - 1, f = m * k, i = Math.floor(f), fn = Interpolation.Utils.CatmullRom;
if (v[ 0 ] === v[ m ]) {
if (k < 0) i = Math.floor(f = m * (1 + k));
return fn(v[ (i - 1 + m) % m ], v[ i ], v[ (i + 1) % m ], v[ (i + 2) % m ], f - i);
} else {
if (k < 0) return v[ 0 ] - (fn(v[ 0 ], v[ 0 ], v[ 1 ], v[ 1 ], -f) - v[ 0 ]);
if (k > 1) return v[ m ] - (fn(v[ m ], v[ m ], v[ m - 1 ], v[ m - 1 ], f - m) - v[ m ]);
return fn(v[ i ? i - 1 : 0 ], v[ i ], v[ m < i + 1 ? m : i + 1 ], v[ m < i + 2 ? m : i + 2 ], f - i);
}
},
Utils: {
/** @ignore */
Linear: function (p0, p1, t) {
return (p1 - p0) * t + p0;
},
/** @ignore */
Bernstein: function (n, i) {
let fc = Interpolation.Utils.Factorial;
return fc(n) / fc(i) / fc(n - i);
},
/* @ignore */
Factorial: (function () {
let a = [ 1 ];
return function (n) {
let s = 1, i;
if (a[ n ]) return a[ n ];
for (i = n; i > 1; i--) s *= i;
a[ n ] = s;
return s;
};
})(),
/** @ignore */
CatmullRom: function (p0, p1, p2, p3, t) {
let v0 = (p2 - p0) * 0.5, v1 = (p3 - p1) * 0.5, t2 = t * t, t3 = t * t2;
return (2 * p1 - 2 * p2 + v0 + v1) * t3 + (- 3 * p1 + 3 * p2 - 2 * v0 - v1) * t2 + v0 * t + p1;
}
}
};