Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

169
Views
Javascript: usar una función matemática para controlar un rango de salida de acuerdo con un rango de entrada

Si sé que una relación de dos variables de entrada "a/b" tiene un rango de [1;2] Y si quiero que mi valor de salida de "y" tenga un rango de [ymin;ymax] de mi elección, según en el rango de "a/b":

¿Hay alguna fórmula que pueda vincular esos dos rangos para que siempre pueda encontrar el valor de y, cualquiera que sea el valor de "a/b" (sabiendo que siempre estará entre 1 y 2)?

Prácticamente:

Tengo una cuadrícula que puedo hacer zoom. No se puede predecir el número de pasos de zoom, pero sé que la escala final dividida por la escala inicial siempre estará entre 1 y 2. Y de acuerdo con ese rango predecible, me gustaría generar proporcionalmente un valor de opacidad para mis líneas de cuadrícula. desde un valor mínimo hasta un valor máximo de mi elección.

Digamos que me gustaría que mis valores de opacidad oscilaran entre 0,12 y 0,38 (es solo un ejemplo) según el nivel de zoom:

La fórmula asegurará que si la relación de escala es 1, la opacidad será 0,12 y si la relación de escala es 2, la opacidad será 0,38. Y todos los valores de opacidad intermedios permanecerían "proporcionales" (un aumento de escala del 50% = un aumento de opacidad del 50%, etc.). Y eso debería funcionar para cualquier rango de salida de mi elección.

Así que me pregunto si buscar una fórmula para lograr esto es razonable o si es más difícil de calcular de lo que parece.

Algo como esto

 let opacity[from desired min to max] = (endScale/startScale)[from 1 to 2] * something + opacityMin;

Pero eso es lineal y probablemente no se ajuste a mis necesidades...

Traté de trazar algunos puntos en papel para averiguarlo, pero la curva no es lineal y no sé cómo encontrar su fórmula algebraica, si es que hay una.

Esto es lo que tracé con el ejemplo de 0.12 a 0.38, considerando la misma progresión dentro del rango de entrada y el rango de salida:

 Input Output percentage multiplier -------------------------------------------- 1 0.12 0% (* 0.12) 1.25 0.185 25% (* 0.148) 1.5 0.25 50% (* 0.166..) 1.75 0.315 75% (* 0.18) 2 0.38 100% (* 0.19)

Si predigo la salida que necesito usando algunos valores de entrada entre 1 y 2, los coeficientes no coinciden, por supuesto. Así que no sé cómo vincular esos dos rangos. .

Cualquier ayuda sería apreciada. Al menos para orientarse un poco.

about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

No encontré otra manera, era un poco raro.

 const range = (props) => { const { rangeInput, rangeOutPut, input } = props if(rangeInput.length && rangeOutPut.length && input){ const BindingMinInput = rangeInput[0] const BindingMaxInput = rangeInput[1] const BindingMin = rangeOutPut[0] const BindingMax = rangeOutPut[1] const outPutMax = (function(){ if(rangeInput.includes(input)){ return input } const test = BindingMaxInput - input return BindingMax * test }()) return outPutMax } else { throw new Error('Props is undefined, or badly formatted props') } } range({ rangeInput:[ 1, 2 ], rangeOutPut:[ 0.12, 0.38 ], input:2 })
about 4 years ago · Juan Pablo Isaza Report

0

No estoy seguro de si existe un buen algoritmo para eso, pero a partir de su descripción del problema, puedo recomendar hacer algo así:

 const zoomMin = 1; const zoomMax = 2; const opacityMin = 0.12; const opacityMax = 0.38; function getOpacityLevel(zoomLevel) { const zoomRange = (zoomMax - zoomMin); const opacityRange = (opacityMax - opacityMin); const zoomLevelPercent = (zoomLevel - zoomMin) / zoomRange; const opacityLevel = (opacityRange * zoomLevelPercent) + opacityMin; return opacityLevel; } console.log(getOpacityLevel(1.0)); console.log(getOpacityLevel(1.25)); console.log(getOpacityLevel(1.5)); console.log(getOpacityLevel(1.75)); console.log(getOpacityLevel(2.0));

about 4 years ago · Juan Pablo Isaza Report

0

si quieres hacerlo al azar.

 var float = Math.random().toFixed(2) console.log(1 + parseFloat(float))
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!