编辑(更新后):
随着你的改变,你要求一个升序函数和类似 y = 1/x 的东西。
可以更改函数的比例以适合您的确切坐标,尽管曲线在开始时倾斜得更陡峭。
y = 154 - 10100 / (20 * x + 100) @ Wolfram Alpha
绘制 154 - 10100 / (20 * x + 100) 从 x=0 到 x=500 @ Wolfram Alpha
注意整数解,我们利用解 x=96, y=149 来改变公式,将这些值缩放到您的坐标范围内。这将使我们更接近您更新的曲线,该曲线更平缓一些。
y = 158 - 2625 / (x + 25) @ Wolfram Alpha
158 - 2625 / (x + 25) 从 x=0 到 x=500 @ Wolfram Alpha
这是您的版本的图,用于比较。
y = -1500 / (x + 15) + 153 @ Wolfram Alpha
原始答案(在您更新之前)
如果您使用非线性比例,我认为您会看到一些奇怪的收敛到您的目标颜色,但尽管如此,您可以使用通用公式并决定哪个多项式或指数给您最好的结果。
一、代数/多项式函数。
A * X ^ N + B = Y
这个通用公式可以在系统中求解,为您提供 N 阶多项式,该多项式拟合两个已知点之间的曲线。在这种情况下,我们求解 <X = 0, Y = 153> 到 <X = 500, Y = 53>。
代入第一个坐标对,我们很容易得到 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。
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() in js] 或 log() [log() / Math.log10e in js]。