我发现遵循1 / b c 模式的函数会生成很好的曲线,可以很好地与插值函数结合。
我使用该函数的方法是将'c'视为变化值,即0和1之间的插值,同时改变b为'锐度'。我用它来计算0到1之间的插值,所以我使用的函数就是这样:
float interpolationvalue = 1 - 1/pow(100,c);
linearinterpolate( val1, val2, interpolationvalue);
到目前为止,我一直在使用一种被黑客入侵的方法使其“正常”,因为当插值= 1时,该值非常接近但不是很接近。
所以我想知道,是否有一个函数形式或者一个可以重现类似于1 / b c 生成的函数的函数,其中c = 0 result = 1和c = 1结果= 0。
甚至C = 0,结果= 0且C = 1结果= 1。
感谢您的帮助!
答案 0 :(得分:2)
对于插值,提供最大灵活性的方法是使用splines,在您的情况下,二次样条似乎就足够了。维基百科页面数学很重,但您可以在谷歌上找到适合的解释。
答案 1 :(得分:1)
1 - c ^ b
b
的值较小?另一种选择是使用三次多项式并将斜率指定为0和1。
答案 2 :(得分:1)
您可以使用A - 1 / b^(c + a)
形式的类似曲线,选择A
和a
的值以匹配您的约束。所以,对于c = 0, result = 1
:
1 = A - 1/b^a => A = 1 + 1/b^a
和c = 1, result = 0
:
0 = A - 1/b^(1+a) => A = 1/b^(1+a)
结合这些,我们可以a
:
b
1 + 1/b^a = 1/b^(1+a)
b^(1+a) + b = 1
b * (b^a - 1) = 1
b^a = 1/b - 1
所以:
a = log_b(1/b - 1) = log(1/b - 1) / log(b)
A = 1 + 1/b^a = 1 / (1-b)
答案 3 :(得分:-1)
在实际数字中,数学家使用的,没有你指定的形式的函数将永远返回0,除法不能做到这一点。 (1 / x)== 0没有真正的解决方案。在浮点运算中,计算机使用的实际算术的关系很差,你可以写1 /(MAX_FP_VALUE ^ 1),这将使你接近0,你可能会得到(实际上,它可能会给你一个NaN或IEEE 754允许的其他奇怪回报之一。
而且,正如我确定你注意到的那样,1 /(b ^ 0)总是返回1,因为根据0次幂的定义,b ^ 0总是为1。
因此,c = 0的函数不会产生0的结果。
对于c = 1,结果= 1,设置b = 1
但我想这只是一个部分答案,我并不十分清楚我明白你要做什么。
此致
标记