Spaces:
Sleeping
Sleeping
| import {linearish} from "./linear.js"; | |
| import {copy, identity, transformer} from "./continuous.js"; | |
| import {initRange} from "./init.js"; | |
| function transformPow(exponent) { | |
| return function(x) { | |
| return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent); | |
| }; | |
| } | |
| function transformSqrt(x) { | |
| return x < 0 ? -Math.sqrt(-x) : Math.sqrt(x); | |
| } | |
| function transformSquare(x) { | |
| return x < 0 ? -x * x : x * x; | |
| } | |
| export function powish(transform) { | |
| var scale = transform(identity, identity), | |
| exponent = 1; | |
| function rescale() { | |
| return exponent === 1 ? transform(identity, identity) | |
| : exponent === 0.5 ? transform(transformSqrt, transformSquare) | |
| : transform(transformPow(exponent), transformPow(1 / exponent)); | |
| } | |
| scale.exponent = function(_) { | |
| return arguments.length ? (exponent = +_, rescale()) : exponent; | |
| }; | |
| return linearish(scale); | |
| } | |
| export default function pow() { | |
| var scale = powish(transformer()); | |
| scale.copy = function() { | |
| return copy(scale, pow()).exponent(scale.exponent()); | |
| }; | |
| initRange.apply(scale, arguments); | |
| return scale; | |
| } | |
| export function sqrt() { | |
| return pow.apply(null, arguments).exponent(0.5); | |
| } | |