1

我发现遵循 1 / b c模式的函数会产生很好的曲线,可以很好地与插值函数耦合。

我使用该函数的方式是将'c' 视为变化值,即0 和1 之间的插值,同时将b 变化为'锐度'。我用它来计算 0 和 1 之间的插值,所以我使用的函数通常是这样的:

float interpolationvalue = 1 - 1/pow(100,c);
linearinterpolate( val1, val2, interpolationvalue);

到目前为止,我一直在使用黑客方法使其“工作”,因为当插值 = 1 时,该值非常接近但不完全为 0。

所以我想知道,是否有一种形式的函数可以重现与 1 / b c产生的曲线相似的曲线,其中 c = 0 结果 = 1 和 c = 1 结果 = 0。

甚至 C = 0,结果 = 0 和 C = 1 结果 = 1。

谢谢你的帮助!

4

4 回答 4

2

对于插值,提供最大灵活性的方法是使用splines,在您的情况下,二次样条似乎就足够了。维基百科页面的数学很重,但你可以在谷歌上找到改编的描述。

于 2010-01-19T11:34:20.643 回答
1

1 - c ^ b的值很小b?另一种选择是使用三次多项式并将斜率指定为 0 和 1。

于 2010-01-19T11:30:57.420 回答
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)

结合这些,我们可以找到ab

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)
于 2010-01-19T12:03:19.640 回答
-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

但我想这只是部分答案,我不太确定我理解你想要做什么。

问候

标记

于 2010-01-19T11:32:10.367 回答