У меня есть домен чисел, например domain = [100, 200]
и количество полос, на которые нужно разделить диапазон, например bands = 5
. Я знаю, что каждая полоса соответствует значению:
band #1 --> v = 0.2
band #2 --> v = 0.4
band #3 --> v = 0.6
band #4 --> v = 0.8
band #5 --> v = 1.0
Эти значения являются фиксированными (жестко запрограммированными): если полосы стали bands = 6
тогда разработчик выбирает значение band #6
.
Я хочу разделить домен на полосы, размер которых зависит от используемого масштаба. Например, я мог бы хотеть использовать или линейную или логарифмическую или шкалу Pow.
Тогда я хочу функцию, которая на входе принимает номер x ∈ domain
и должна возвращать значение v
связанное с полосой, которой принадлежит номер inout.
Здесь похожий вопрос, но теперь я хочу использовать разные шкалы (например, я могу использовать d3 scales
), но я не знаю, как..
Вот кусок кода:
function getLinearScaledValue(x, min, max, bands) {
const range = max - min
if (x === max) {
return 1
} else {
return Math.floor(1 + ((x - min) / range) * bands) / bands
}
}
где min
и max
- это минимальное и максимальное значение домена.
Я думаю, что примеры лунатизма были хорошими, поэтому я поместил их здесь:
если полос = 5:
band #1 --> v = 0.2
band #2 --> v = 0.4
band #3 --> v = 0.6
band #4 --> v = 0.8
band #5 --> v = 1.0
(1) если масштаб линейный, а домен = [0, 100] → полосы:
band #1 --> v = 0.2 --> [0, 20]
band #2 --> v = 0.4 --> [21, 40]
band #3 --> v = 0.6 --> [41, 60]
band #4 --> v = 0.8 --> [61, 80]
band #5 --> v = 1.0 --> [81, 100]
например:
if x = 0 --> v = 0.2
if x = 10 --> v = 0.2
if x = 21 --> v = 0.4
if x = 98 --> v = 1.0
(2) если масштаб линейный, а домен = [100, 200] → полосы:
band #1 --> v = 0.2 --> [100, 120]
band #2 --> v = 0.4 --> [121, 140]
band #3 --> v = 0.6 --> [141, 160]
band #4 --> v = 0.8 --> [161, 180]
band #5 --> v = 1.0 --> [181, 200]
например:
if x = 100 --> v = 0.2
if x = 110 --> v = 0.2
if x = 121 --> v = 0.4
if x = 198 --> v = 1.0
(3) если масштаб является логарифмическим, а домен = [0, 100] → полосы:
band #1 --> v = 0.2 --> [?, ?]
band #2 --> v = 0.4 --> [?, ?]
band #3 --> v = 0.6 --> [?, ?]
band #4 --> v = 0.8 --> [?, ?]
band #5 --> v = 1.0 --> [?, ?]
например:
if x = 0 --> v = ?
if x = 10 --> v = ?
if x = 21 --> v = ?
if x = 98 --> v = ?