изменить (после обновления):
С вашими изменениями вы запрашиваете возрастающую функцию и что-то похожее на y = 1 / x.
Масштаб вашей функции может быть изменен в соответствии с вашими точными координатами, хотя кривая наклоняется намного быстрее в начале.
y = 154 - 10100 / (20 * x + 100) @ Wolfram Alpha
Участок 154 - 10100 / (20 * х + 100) от х = 0 до х = 500 @ Wolfram Alpha
Отмечая целочисленные решения, мы используем решение x = 96, y = 149, чтобы изменить формулу, масштабируя эти значения в вашем координатном диапазоне. Это даст нам что-то ближе к вашей обновленной кривой, которая будет немного мягче.
y = 158 - 2625 / (x + 25) @ Wolfram Alpha
Участок 158 - 2625 / (х + 25) от х = 0 до х = 500 @ Wolfram Alpha
Для сравнения приведен сюжет вашей версии.
y = -1500 / (x + 15) + 153 @ Wolfram Alpha
Оригинальный ответ (до обновления)
Я думаю, вы увидите некоторые странные сходства с цветом назначения, если вы используете нелинейную шкалу, но, тем не менее, вы можете использовать общую формулу и решить, какой полином или экспонента даст вам наилучшие результаты.
Во-первых, алгебраическая / полиномиальная функция.
A * X ^ N + B = Y
Эта общая формула может быть решена в системе, чтобы получить многочлен порядка N, который соответствует кривой между двумя известными точками. В этом случае мы решаем от до .
Подставляя первую пару координат, мы легко получаем B.
A * (0) ^ N + B = (153)
0 + B = (153)
B = 153
Теперь, подставив вторую пару, мы можем найти A.
A * (500) ^ N + 153 = (53)
A * (500) ^ N = -100
A = -100 / (500 ^ N)
Если вам нужен линейный масштаб, вы подставляете N = 1, и это дает нам A = -0,20.
-0.20 * X + 153 = Y
Если вам нужна квадратичная шкала, вы подставляете N = 2, и это дает нам A = -0,0004.
-0.0004 * X ^ 2 + 153 = Y
Вы также можете использовать нецелочисленное значение для N, от 1 до 2 (попробуйте 1,5 или 1,6), что, я думаю, даст вам лучшие результаты. Также обратите внимание, что при увеличении этой функции она в конечном итоге опустится ниже нуля, но только после того, как кривая пройдет через вторую точку.
Вот экспоненциальная функция. Я использую e в качестве основы здесь, хотя вы можете изменить его на что-то большее, чем 1. Чтобы подогнать кривую между двумя точками, мы получим наилучшие результаты, если обе точки имеют значения Y больше нуля. В противном случае нам нужно было бы добавить смещение и определить, где мы хотим, чтобы базовая линия была. Для целей здесь мы будем предполагать, что базовая линия Y = 0. Это означает, что по мере увеличения X Y в конечном итоге будет ползти к 0, но фактически не достигнет 0, после того как он пройдет через вторую точку.
A * e ^ (B * X) = Y
Опять решаем по первой координате.
A * e ^ (B * 0) = 153
A * e ^ (0) = 153
A * 1 = 153
A = 153
Подставим, чтобы получить B со второй координатой.
153 * e ^ (B * 500) = 53
e ^ (B * 500) = 53 / 153
B * 500 = ln(53 / 153)
B = ln(53 / 153) / 500
ln (val) - натуральное логарифм, обратный к e ^ val. Мой калькулятор говорит, что B примерно равно -0.0021202920156806272577911119053782, или, возможно, -0.0021 будет работать лучше всего вкратце. Если вы хотите решить это для других баз показателей, используйте идентификаторы экспоненты / логарифма таким же образом, чтобы решить для любой другой базы и изменить базу логарифма на ln () [log () в js] или log () [log () / Math.log10e в js].