mirror of
https://kevinblog.sytes.net/Code/Jibo-Revival-Group/RoboCommander.git
synced 2026-06-15 13:46:05 +00:00
52 lines
1.6 KiB
JavaScript
52 lines
1.6 KiB
JavaScript
var e10 = Math.sqrt(50),
|
|
e5 = Math.sqrt(10),
|
|
e2 = Math.sqrt(2);
|
|
|
|
export default function(start, stop, count) {
|
|
var reverse,
|
|
i = -1,
|
|
n,
|
|
ticks,
|
|
step;
|
|
|
|
stop = +stop, start = +start, count = +count;
|
|
if (start === stop && count > 0) return [start];
|
|
if (reverse = stop < start) n = start, start = stop, stop = n;
|
|
if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];
|
|
|
|
if (step > 0) {
|
|
start = Math.ceil(start / step);
|
|
stop = Math.floor(stop / step);
|
|
ticks = new Array(n = Math.ceil(stop - start + 1));
|
|
while (++i < n) ticks[i] = (start + i) * step;
|
|
} else {
|
|
start = Math.floor(start * step);
|
|
stop = Math.ceil(stop * step);
|
|
ticks = new Array(n = Math.ceil(start - stop + 1));
|
|
while (++i < n) ticks[i] = (start - i) / step;
|
|
}
|
|
|
|
if (reverse) ticks.reverse();
|
|
|
|
return ticks;
|
|
}
|
|
|
|
export function tickIncrement(start, stop, count) {
|
|
var step = (stop - start) / Math.max(0, count),
|
|
power = Math.floor(Math.log(step) / Math.LN10),
|
|
error = step / Math.pow(10, power);
|
|
return power >= 0
|
|
? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)
|
|
: -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);
|
|
}
|
|
|
|
export function tickStep(start, stop, count) {
|
|
var 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;
|
|
}
|