J'ai un domaine de nombres, par exemple domain = [100, 200]
et un nombre de bandes dans lesquelles diviser l'intervalle, par exemple bands = 5
. Je sais que chaque bande correspond à une valeur :
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
Ces valeurs sont fixes (codées en dur) : si les bandes deviennent bands = 6
c'est le développeur qui choisit la valeur de band #6
.
Je souhaite diviser le domaine en bandes dont la taille varie en fonction de l'échelle utilisée. Par exemple, je pourrais vouloir utiliser l'échelle linéaire, l'échelle logarithmique ou l'échelle pow.
Je veux ensuite une fonction qui, en entrée, prend un nombre x domain
et doit renvoyer la valeur v
associé à la bande à laquelle appartient le numéro d'entrée.
Voici une question similaire mais je veux maintenant utiliser des échelles différentes (par exemple, je peux utiliser d3 scales
) mais je ne sais pas comment
Voici un morceau de code :
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
}
}
donde min
y max
sont les valeurs minimale et maximale du domaine.
Je pense que les exemples de sleepwalking étaient bons, alors je les ai mis ici :
si bandes = 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) si l'échelle est linéaire et le domaine = [0, 100] --> les bandes sont :
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]
par exemple :
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) si l'échelle est linéaire et le domaine = [100, 200] --> les bandes sont :
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]
par exemple :
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) si l'échelle est logarithmique et le domaine = [0, 100] --> les bandes sont :
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 --> [?, ?]
par exemple :
if x = 0 --> v = ?
if x = 10 --> v = ?
if x = 21 --> v = ?
if x = 98 --> v = ?