Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@llamadonica
Created February 28, 2014 02:55
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save llamadonica/9264283 to your computer and use it in GitHub Desktop.
Save llamadonica/9264283 to your computer and use it in GitHub Desktop.
Gist function for easing.
class BezierPolynomial {
static _BezierGen generator = new _BezierGen();
static List<num> getTTerms(List<num> pTerms) {
var i = pTerms.length + 1;
var matrix = generator[i];
List<num> results = new List();
num linTerm = pTerms[0] - pTerms[0];
for (var j = 0; j < i - 1; j++) { //Get the nth term
num tTerm = pTerms[0] - pTerms[0];
for (var k = i; k > j && k > 1; k--) {
tTerm += matrix[j][k-1]*pTerms[i-k];
}
if (j==0)
tTerm += matrix[j][0];
linTerm -= tTerm;
results.add(tTerm);
}
results.add(linTerm + 1);
return results;
}
}
class _BezierGen {
final List<List<List<int>>> _generators = new List();
_BezierGen() {
_generators.add([[1]]);
}
void addMatrix () {
var i = _generators.length;
List<List<int>> rows = new List();
List<int> currentRow = _generators[i-1][0];
List<int> previousRow =
new List.from(currentRow.map((_) => 0), growable: false);
for (var j = 0; j < i; j++) {
currentRow = _generators[i-1][j];
List<int> row = new List();
row.add(currentRow[0]);
for (var k=1; k < i; k++) {
row.add(previousRow[k-1] + currentRow[k] - currentRow[k-1]);
}
row.add(previousRow[i-1] - currentRow[i-1]);
rows.add(row);
previousRow = currentRow;
}
List<int> row = new List();
row.add(0);
for (var k=1; k <= i; k++) {
row.add(previousRow[k-1]);
}
rows.add(row);
_generators.add(rows);
}
List<List<int>> operator [](int index) {
var length = _generators.length;
if (index < length) return _generators[index];
for (var i = length;i <= index;i++)
addMatrix();
return _generators[index];
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment