Чтобы получить одну из этих 1-2-5-тактовых схем от range
(0..max
), мы должны разделить порядок величины (exponent
) и цифры (mantissa
), и найти наиболее подходящий di git (1, 2 или 5) ниже или равен наиболее значимому di git из representative
.
См. такую функцию в JavaScript:
// find 1-2-5-tick distance for a given range
function tick_distance(range) {
let find_factor = function(v) {
if (v >= 5) {
v = 5;
} else if (v >= 2) {
v = 2;
} else if (v >= 1) {
v = 1;
}
return v;
};
let representative = range * 0.24
let l10 = Math.log10(representative);
let exponent = Math.floor(l10);
let mantissa = l10-exponent;
let realdist = Math.pow(10, mantissa);
let factor = find_factor(realdist);
let dist = factor * Math.pow(10, exponent);
return dist;
}
Коэффициент heuristi c, равный 0.24
для representative
, дает число тиков от 4 до 10 при изменении порядков величины; 0.23
также будет работать, тогда как 0.25
обеспечивает максимум 10 тиков только для диапазонов 2*10^n
.
0.22
дает иногда 11 тиков 2.26
дает иногда 3 галочки
Я признаю, что меня самого интересует "точное значение" для этого фактора.