关于 (1) / ( b ^ c ) 形式的函数的数学问题

问题描述 投票:0回答:4

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

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

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

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

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

或者甚至 C = 0,结果 = 0 且 C = 1 结果 = 1。

感谢您的帮助!

c++ math interpolation
4个回答
2
投票

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


1
投票

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


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)

-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

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

© www.soinside.com 2019 - 2024. All rights reserved.