Если он линейный, вы можете использовать следующую формулу, чтобы учесть любой минимум и максимум:
from_min = -1.3
from_max = 1.7
to_min = 40
to_max = 99
from = <whatever value you want to convert>
to = (from - from_min) * (to_max - to_min) / (from_max - from_min) + to_min
Бит * (to_max - to_min) / (from_max - from_min)
масштабирует диапазон от диапазона from
до диапазона to
. Вычитая from_min
до и добавляя to_min
после, найдите правильную точку в диапазоне to
.
Примеры, сначала оригинал:
(1.3..1.7) -> (40..99)
to = (from - from_min) * (to_max - to_min) / (from_max - from_min) + to_min
= (from - 1.3) * 59 / 0.4 + 40
= (from - 1.3) * 147.5 + 40 (same as Ignacio)
= from * 147.5 - 151.75 (same as Zebediah using expansion)
Затем тот, который использует -1,3 в качестве нижней границы, как упомянуто в одном из ваших комментариев:
(-1.3..1.7) -> (40..99)
to = (from - from_min) * (to_max - to_min) / (from_max - from_min) + to_min
= (from - -1.3) * 59 / 3 + 40
= (from + 1.3) * 19.67 + 40
Этот ответ (и все остальные на сегодняшний день, конечно) предполагает, что он является линейной функцией. Это ни в коем случае не ясно, если использовать в вопросе такие слова, как «дуга» и «ручка». Вам может понадобиться некоторая тригонометрия (синусы, косинусы и т. Д.), Если окажется, что линейного недостаточно.