我需要一个可以手动步进的变化值,它可以在 a和 a之间step()
来回移动,每个.min
max
speed
step()
这是我当前的代码:
template<typename T> struct PingPongValue {
T value, min, max, speed, dir{1};
PingPongValue(T mMin, T mMax, T mSpeed)
: value(mMin), min(mMin), max(mMax), speed(mSpeed) { }
void step()
{
value += speed * dir;
if(value > max) { value = max; dir = -1; }
else if(value < min) { value = min; dir = +1; }
}
};
例子:
PingPongValue v{0, 5, 1};
v.step(); // v.value == 1
v.step(); // v.value == 2
v.step(); // v.value == 3
v.step(); // v.value == 4
v.step(); // v.value == 5
v.step(); // v.value == 4
v.step(); // v.value == 3
v.step(); // v.value == 2
// etc...
我想有一种数学方法可以将其表示为无分支函数,但我无法弄清楚。我尝试使用模,但我仍然需要一个dir
变量来改变步进方向。