首页 > 解决方案 > 如何根据增量时间使 x += (1 - x) 正确工作?

问题描述

假设 Time.deltatime 可用于获取代码更新之间的实时时间。

所以,如果我有一个总和,并且我想让它基于实时运行,我会这样做:

x += 1;

进入这个:

x += 1 * Time.deltatime;

我的问题是:我怎么能用这段代码做同样的事情:

x += (1 - x)*0.1;

这是我用来顺利接近 1 的简单代码。问题是我不能简单地做

x += (1 - x)*Time.deltatime

因为这显然不会使它基于实时工作。我应该如何进行?


让我们假设代码每秒运行 4 次。如果 x 从 0 开始,会是这样。

代码是

x += (1 - x)*0.1

每个步骤的结果将是:

step 1: x = 0.1
step 2: x = 0.19
step 3: x = 0.271
step 4: x = 0.3439

我怎么能以同样的方式达到这个效果,但每秒只运行 2 次,像这样:

step 1: x = 0.19
step 2: x = 0.3439

那么代码是什么?

标签: mathtimegeneric-programmingalgebra

解决方案


如果您将您的系列视为迭代计数的函数f(t)t那么

f(t) = 1 - 0.9^t

^是电源运算符。

因此,如果我们假设时间增量 1 对应于您的原始系列,您可以使用以下公式:

x := 1 - (1 - x) * 0.9^deltatime

推荐阅读