Published
Edited
Mar 23, 2018
1 fork
10 stars
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
// `prev` and `next` are both lists of opentype paths
function make_interpolators (prev, next) {
// first, some edge cases
if (prev.length == 0 && 0 == next.length) {
return [];
}
if (next.length == 0) {
return prev.map(op => flubber.interpolate(op.toPathData(), [op_center(op)]));
}
if (prev.length == 0) {
return next.map(op => flubber.interpolate([op_center(op)], op.toPathData()));
}
// normality
var prevpaths = prev.map(op => op.toPathData());
var nextpaths = next.map(op => op.toPathData());
const N = Math.min(prevpaths.length - 1, nextpaths.length - 1);
var interpolators = [];
for (var i = 0; i < N; i++) {
interpolators.push(flubber.interpolate(prevpaths[i], nextpaths[i]));
}
if (prevpaths.length > nextpaths.length) {
interpolators = interpolators.concat(flubber.combine(
prevpaths.slice(N),
nextpaths[nextpaths.length - 1]
));
} else {
interpolators = interpolators.concat(flubber.separate(
prevpaths[prevpaths.length - 1],
nextpaths.slice(N)
));
}
return interpolators;
}
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more