Ease of Motion函数(Ease to number)C++
Ease of Motion Function (Ease to number) C++
我想让某物动作流畅。想想一部电梯,当它到达所需楼层时,它不会全速运行并死机停止。它会尽可能快地移动,然后逐渐减速,直到到达所需的楼层。
我需要一个循环来输入...
int steps = 10;
int target = 100;
因此该函数将采取十个步骤来达到目标值 100。
理想情况下,此函数的行为应该非常类似于 PID loop。
本质上,我希望有一种比创建 PID 循环更简单的方法来完成此操作。
你总是可以做一些比 PID 更简单的事情,方法是根据你有多接近(如果你愿意的话,一个 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;
我需要的正是 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;
}
我想让某物动作流畅。想想一部电梯,当它到达所需楼层时,它不会全速运行并死机停止。它会尽可能快地移动,然后逐渐减速,直到到达所需的楼层。
我需要一个循环来输入...
int steps = 10;
int target = 100;
因此该函数将采取十个步骤来达到目标值 100。
理想情况下,此函数的行为应该非常类似于 PID loop。
本质上,我希望有一种比创建 PID 循环更简单的方法来完成此操作。
你总是可以做一些比 PID 更简单的事情,方法是根据你有多接近(如果你愿意的话,一个 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;
我需要的正是 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;
}