易于运动功能(易于编号)C ++

时间:2016-12-05 18:38:41

标签: c++ function loops animation motion

我想用平稳的动作做一些动作。考虑一下电梯,当电梯到达所需的楼层时,它不会全速前进和停止。它会尽可能快地逐渐减速直到达到所需的楼层。

我需要一个输入的循环......

int steps = 10;
int target = 100;

因此该功能需要十步才能达到目标值100。

理想情况下,此功能应该与PID loop非常相似。

本质上,我希望有一种比创建PID循环更简单的方法来实现这一点。

2 个答案:

答案 0 :(得分:2)

你总是可以做一些比PID更简单的事情,你可以根据你的接近程度来调整你的速度(如果你愿意,可以调整P循环)。当然,通过一定数量的步骤,你必须在最后一步中完成其余部分,但如果它足够小,那么它不应该是一个大问题。 / p>

这相当于每一步所留下的距离的固定百分比,百分比取决于你想要减速的速度。在您的示例中,您可能会执行40%的操作:

{0., 40., 64., 78.4, 87.04, 92.224, 95.3344, 97.2006, 98.3204, 98.9922}
{0, 40, 64, 78, 87, 92, 95, 97, 98, 100} after rounding

从0开始并转到目标值N的代码将是

#include <math.h>
...
int steps[NUM_STEPS];
for (int i = 0; i < NUM_STEPS - 1; i++) {
    steps[i] = N - N * pow(.6, i);
}
steps[NUM_STEPS - 1] = N;

答案 1 :(得分:1)

我需要完全由Iluvatar提供......

#include <math.h> 
using namespace std;

int main()
{
    void smooth(int, int, float);

    smooth(10, 100, 0.6);

    return 0;
}

void smooth(int steps, int target, float increment) {
    for (int i = 0; i < steps - 1; i++) {
        int num = target - target * pow(increment, i);
        cout << num << endl;
    }
    cout << target << endl;
}
相关问题