File size: 1,478 Bytes
bc20498 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
import continuous from "./continuous.js";
import {initRange} from "./init.js";
import {linearish} from "./linear.js";
import number from "./number.js";
function square(x) {
return Math.sign(x) * x * x;
}
function unsquare(x) {
return Math.sign(x) * Math.sqrt(Math.abs(x));
}
export default function radial() {
var squared = continuous(),
range = [0, 1],
round = false,
unknown;
function scale(x) {
var y = unsquare(squared(x));
return isNaN(y) ? unknown : round ? Math.round(y) : y;
}
scale.invert = function(y) {
return squared.invert(square(y));
};
scale.domain = function(_) {
return arguments.length ? (squared.domain(_), scale) : squared.domain();
};
scale.range = function(_) {
return arguments.length ? (squared.range((range = Array.from(_, number)).map(square)), scale) : range.slice();
};
scale.rangeRound = function(_) {
return scale.range(_).round(true);
};
scale.round = function(_) {
return arguments.length ? (round = !!_, scale) : round;
};
scale.clamp = function(_) {
return arguments.length ? (squared.clamp(_), scale) : squared.clamp();
};
scale.unknown = function(_) {
return arguments.length ? (unknown = _, scale) : unknown;
};
scale.copy = function() {
return radial(squared.domain(), range)
.round(round)
.clamp(squared.clamp())
.unknown(unknown);
};
initRange.apply(scale, arguments);
return linearish(scale);
}
|