C++ - 难以理解 easeInOutSine

标签 c++ algorithm easing

我试图理解这个缓动公式:

float easeInOutSine(float t, float b, float c, float d)
{
    return -c/2 * (cos(M_PI*t/d) - 1) + b;
};

以下是变量的含义:

t:当前时间 b:起始值 c:值的变化 d:持续时间

我正在尝试将其应用于 Sprite 转换,但对到底需要传入什么感到困惑。

例如,如果我想以每秒 0.25 单位的速度将球从 y = 0 移向 y = 10,则哪些值是哪些?我真正想要的是这些变量与我所追求的相关的含义的另一种解释。

最佳答案

t 必须是您的系统/模拟的时间。每次您调用它时,这都会改变。

b 应该是 0,起始值。

c 应为 10,最终值,

d 应为 40000(假设您的时间以毫秒为单位)。这本质上就是持续时间。每四秒您需要前进一个单位,总共需要 40 秒。

您可以使用示例程序来测试/使用它:

float easeInOutSine(float t, float b, float c, float d)
{
    return -c/2 * (cos(M_PI*t/d) - 1) + b;
}

int main() {
    for (unsigned t = 0; t <= 40*1000; t += 1000) {
        cout << "t= " << t << " y=" << easeInOutSine(t, 0, 10, 40000) << std::endl;
    }
}

输出:

t= 0 y=0
t= 1000 y=0.0154133
t= 2000 y=0.0615583
t= 3000 y=0.13815
t= 4000 y=0.244717
t= 5000 y=0.380602
t= 6000 y=0.544967
t= 7000 y=0.736799
t= 8000 y=0.954915
t= 9000 y=1.19797
t= 10000 y=1.46447
t= 11000 y=1.75276
t= 12000 y=2.06107
t= 13000 y=2.38751
t= 14000 y=2.73005
t= 15000 y=3.08658
t= 16000 y=3.45492
t= 17000 y=3.83277
t= 18000 y=4.21783
t= 19000 y=4.6077
t= 20000 y=5
t= 21000 y=5.3923
t= 22000 y=5.78217
t= 23000 y=6.16723
t= 24000 y=6.54508
t= 25000 y=6.91342
t= 26000 y=7.26995
t= 27000 y=7.61249
t= 28000 y=7.93893
t= 29000 y=8.24724
t= 30000 y=8.53553
t= 31000 y=8.80203
t= 32000 y=9.04508
t= 33000 y=9.2632
t= 34000 y=9.45503
t= 35000 y=9.6194
t= 36000 y=9.75528
t= 37000 y=9.86185
t= 38000 y=9.93844
t= 39000 y=9.98459
t= 40000 y=10

关于C++ - 难以理解 easeInOutSine,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23038569/

相关文章:

c++ - 重载宏

algorithm - 在有效时间内检查两个 3d 网格是否相等

javascript - toggleClass 缓动仅适用于缓出

javascript - JQuery SlideToggle() 执行缓动的每一步函数

c++ - 将 vector 限制在最小值和最大值?

javascript - TweenJS中如何实现弹道缓动效果

c++ - 警告匿名命名空间在结构内部使用函数指针

c++ - C++ 中的文本文件读取问题

c++ - 如何在跨平台应用程序中存储首选项(和用户设置)?

java - 快速随机森林算法实现