d3.scale
数値の配列を変更し、カスタム補間関数を使用して新しい範囲に出力したいと考えています。補間関数は、トランジションで使用されるイージング関数の 1 つにする必要があります。たとえば、次のようになりeaseInOutQuad
ます。
easeInOutQuad = function (x, t, b, c, d) {
if ((t/=d/2) < 1) return c/2*t*t + b;
return -c/2 * ((--t)*(t-2) - 1) + b;
}
したがって、私の入力配列は、配列の先頭で数値がゆっくりと増加し、中央に向かって徐々に速くなり、最後に向かって再び遅くなる[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
ようなものになります。[0, 2, 5, 10, 20, 40, 70, 90, 95, 98, 100]
これまでの私のコード:
var inputArr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
linearArr = [],
easingArr = [],
easing = d3.interpolate, // ?
min = d3.min(inputArr),
max = d3.max(inputArr),
linearScale = d3.scale.linear()
.domain([min,max])
.range([0,100]),
easingScale = d3.scale.linear()
.domain([min,max])
.interpolate(easing) // ?
.range([0,100]);
for (var i = 0; i < inputArr.length; i++) {
linearArr[i] = linearScale(inputArr[i]);
easingArr[i] = easingScale(inputArr[i]);
}
console.log(linearArr); // 0,10,20,30,40,50,60,70,80,90,100
console.log(easingArr); // 0,10,20,30,40,50,60,70,80,90,100
このようなイージング関数を で使用する方法の提案/例をありがとうd3.interpolate
。