¿Hay alguna manera de generar n números cuyo espacio entre ellos crezca gradualmente y que ese espacio varíe entre un valor mínimo y un valor máximo? No es importante el dominio de estos números.
Me imagino llamar a una función como esta:
const serie = computeSerie(n, minSpace, maxSpace) // domain is not important, for example [1, +infinity] but also [0, 1], what you prefer const serie1 = computeSerie(5, 1, 1) // [1, 2, 3, 4, 5] const serie2 = computeSerie(5, 2, 2) // [1, 3, 5, 7, 9] const serie3 = computeSerie(5, 1, 4) // [1, ...] I don't know, I suppose to use a pow math function (?) const serie4 = computeSerie(7, 1, 6) // [1, 2, 4, 8, 13, 18, 24]Visualmente:
serie1: |-|-|-|-| serie2: |--|--|--|--| serie3: |-|???|--| serie4: |-|--|---|----|-----|------|No tengo idea de cómo implementar esto, tal vez d3 podría ser útil, pero ¿cómo?
muchas gracias por cada consejo
Esto debería funcionar, pero si los valores de minSpace y maxSpace no coinciden con n , también obtendrá valores fraccionarios. (¿Puede hacer un Math.floor/ceil/round para esos?)
function computeSerie(n, minSpace, maxSpace) { const step = (maxSpace - minSpace) / (n - 2) const arr = [] const startAt = 1 arr.push(startAt) for (let i = 1; i < n; i++) { arr.push(arr[i - 1] + minSpace + (i - 1) * step) } return arr } console.log(computeSerie(5, 1, 1)) // [1, 2, 3, 4, 5] console.log(computeSerie(5, 2, 2)) // [1, 3, 5, 7, 9] console.log(computeSerie(5, 1, 4)) // [1, 2, 4, 7, 11] console.log(computeSerie(7, 1, 6)) // [1, 2, 4, 7, 11, 16, 22] // will get fractional values for this console.log(computeSerie(7, 1, 5)) // [1, 2, 3.8, 6.4, 9.8, 14, 19]