我有一个值是 0-100 的浮点百分比值,x
,另一个值是 0-1 的浮点值,y
。随着 y
越来越接近于零,它应该在对数曲线上减小 x
的值。
例如,假设 x = 28.0f
和 y = 0.8f
。由于 0.8f
与 1.0f
相差不远,因此它应该只将 x
的值减少一点点,比如将其降低到x = 25.0f
或类似的东西。随着 y
越来越接近于零,它应该越来越大幅度地减少 x
的值。我能想到的唯一方法是使用对数曲线。我知道我想要它做什么,但我终其一生都无法弄清楚如何在 C++ 中实现它。这个算法在 C++ 中会是什么样子?
最佳答案
听起来你想要这个:
new_x = x * ln((e - 1) * y + 1)
我假设您有自然对数函数 ln
和常量 e
。 x
的乘积是 y
的对数函数,当 y = 0 时为 0,当 y = 1 时为 1。
这是该函数背后的逻辑(这基本上是一个数学问题,而不是编程问题)。您需要看起来像 ln
函数的东西,首先急剧上升然后趋于平稳。但是你希望它从 (0, 0) 开始,然后经过 (1, 1),而 ln
从 (1, 0) 开始,经过 (e, 1)。这表明在执行 ln
之前,您需要执行一个简单的线性移位,将 0 转换为 1,将 1 转换为 e:((e - 1) * y + 1
。
关于c++ - 修改对数曲线上的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28242197/