You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
33 lines
883 B
33 lines
883 B
import {linearish} from "./linear"; |
|
|
|
export default function diverging(interpolator) { |
|
var x0 = 0, |
|
x1 = 0.5, |
|
x2 = 1, |
|
k10 = 1, |
|
k21 = 1, |
|
clamp = false; |
|
|
|
function scale(x) { |
|
var t = 0.5 + ((x = +x) - x1) * (x < x1 ? k10 : k21); |
|
return interpolator(clamp ? Math.max(0, Math.min(1, t)) : t); |
|
} |
|
|
|
scale.domain = function(_) { |
|
return arguments.length ? (x0 = +_[0], x1 = +_[1], x2 = +_[2], k10 = x0 === x1 ? 0 : 0.5 / (x1 - x0), k21 = x1 === x2 ? 0 : 0.5 / (x2 - x1), scale) : [x0, x1, x2]; |
|
}; |
|
|
|
scale.clamp = function(_) { |
|
return arguments.length ? (clamp = !!_, scale) : clamp; |
|
}; |
|
|
|
scale.interpolator = function(_) { |
|
return arguments.length ? (interpolator = _, scale) : interpolator; |
|
}; |
|
|
|
scale.copy = function() { |
|
return diverging(interpolator).domain([x0, x1, x2]).clamp(clamp); |
|
}; |
|
|
|
return linearish(scale); |
|
}
|
|
|