Tengo un conjunto de datos con un volumen para una elevación de superficie determinada de una cuenca irregular. Por ejemplo:
cm kL 11870 : 6043453 11871 : 6053522 11872 : 6063591 11873 : 6073674 11874 : 6083767 (...1550 rows)cm es una serie que siempre se incrementa en uno ; Los valores de kL asociados son irregulares pero siempre aumentan y nunca se duplican . El mapeo nunca cambia y se puede cargar/almacenar en cualquier formato conveniente.
¿Javascript tiene una forma simple de convertir entre cm y kL? Idealmente con interpolación lineal en ambas direcciones. En última instancia, estoy buscando esta funcionalidad:
cm_to_kL(11872.2); //Expect 6065607.6 kL_to_cm(6065600); //Expect 11872.199Escribí un ejemplo de cómo comenzar a resolver este problema. Como ya se mencionó, no hay funcionalidad interna para interpolar o manejar tales estructuras, pero necesita escribir su propia lógica.
Debo admitir que no soy un experto en matemáticas (+ son las 2 am aquí, pero esta pregunta me interesó :D).
Espero que esto te ayude al menos para empezar:
const data = { 11870 : 6043453, 11871 : 6053522, 11872 : 6063591, 11873 : 6073674, 11874 : 6083767, }; const cm_to_kL = (val) => { const cm_ref = Math.floor(val); const factor = parseFloat((val % cm_ref).toFixed(5)); const lower = data[cm_ref]; const higher = data[cm_ref + 1]; if (isNaN(lower) || isNaN(higher)) { throw Error('Data entry point not found'); } const result = lower + ((higher - lower) * factor); if (isNaN(result)) { throw Error('Incorrect data provided'); } return result; }; const kL_to_cm = (val) => { const [cm, kL] = Object.entries(data).find(([k, v]) => val < v); if (isNaN(cm) || isNaN(kL)) { throw Error('Data entry point not found'); } const lower_cm = cm - 1; const lower_kL = data[lower_cm]; const diff = (val - lower_kL) / (kL - lower_kL); const result = parseFloat((lower_cm + diff).toFixed(5)) if (isNaN(result)) { throw Error('Incorrect data provided'); } return result; }; console.log('11872.2', cm_to_kL(11872.2), ); console.log('6065600', kL_to_cm(6065600), );¡Sí, por supuesto, JS tiene que hacer lo que necesita! Puede crear 2 Map s a partir de su matriz dada, una para cm a kL y otra para kL a cm. Cree dos funciones para ellos cm_to_kL y kL_to_cm para obtener el valor de Map s después de esto, puede obtener fácilmente elementos con complejidad O (1)