Skip to content

Instantly share code, notes, and snippets.

@tamask
Created December 7, 2011 17:05
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 tamask/1443606 to your computer and use it in GitHub Desktop.
Save tamask/1443606 to your computer and use it in GitHub Desktop.
interpolate_bezier
function interpolate_bezier(a, b, c, d, resolution) {
/* Blender's forward differencing bezier interpolation */
var p = [];
var res = resolution - 1;
var dims = Math.max(
a.length, b.length, c.length, d.length);
for (var i = 0; i < res; i++) {
var x = [];
for (var j = 0; j < dims; j++)
x.push(0.0);
p.push(x);
}
for (var i = 0; i < dims; i++) {
var q0, q1, q2, q3;
var rt0, rt1, rt3, f;
var f;
q0 = a[i];
q1 = b[i];
q2 = c[i];
q3 = d[i];
f = res;
rt0 = q0;
rt1 = 3.0 * (q1 - q0) / f;
f *= f;
rt2 = 3.0 * (q0 - 2.0 * q1 + q2) / f;
f *= res;
rt3 = (q3 - q0 + 3.0 * (q1 - q2)) / f;
q0 = rt0;
q1 = rt1 + rt2 + rt3;
q2 = 2 * rt2 + 6 * rt3;
q3 = 6 * rt3;
for (var j = 0; j < res; j++) {
p[j][i] = q0;
q0 += q1;
q1 += q2;
q2 += q3;
}
}
return p;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment