/** * Calculate tick step. * Implementation from d3-array (ticks.js) * https://github.com/d3/d3-array/blob/master/src/ticks.js * @param start Start value * @param stop End value * @param count Ticks count */ export function tickStep(start: number, stop: number, count: number): number { let e10 = Math.sqrt(50), e5 = Math.sqrt(10), e2 = Math.sqrt(2); let step0 = Math.abs(stop - start) / Math.max(0, count), step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)), error = step0 / step1; if (error >= e10) { step1 *= 10; } else if (error >= e5) { step1 *= 5; } else if (error >= e2) { step1 *= 2; } return stop < start ? -step1 : step1; }