我想用平稳的动作做一些动作。考虑一下电梯,当电梯到达所需的楼层时,它不会全速前进和停止。它会尽可能快地逐渐减速直到达到所需的楼层。
我需要一个输入的循环......
int steps = 10;
int target = 100;
因此该功能需要十步才能达到目标值100。
理想情况下,此功能应该与PID loop非常相似。
本质上,我希望有一种比创建PID循环更简单的方法来实现这一点。
答案 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;
}