我有一条在时间“t”评估的路径,并根据路径类型返回方向和位置。
time 的值受路径类型的影响:
switch (type)
{
case PathType.Closed:
time = ToolBox.Wrap(time, StartTime, EndTime);
break; // Wrap time around the path time to loop
case PathType.Open:
time = ToolBox.Min(time, EndTime);
break; // Clamp the time value to the max path time range
case PathType.Oscillating:
break;
}
缺失的环节在摆动。
我的问题是什么是在两个值之间振荡的一种好的、有效的方法?
例如 (2, 7)。如果时间达到 7,它会反转并减少到 2,一旦达到 2,它就会反转并增加到 7。
该算法应该知道是否根据原始值增加/减少该值,因此如果值为 9,则它知道答案是 7 - (Abs(7 - 9)。如果值为 14,则该值已环绕,因此它将导致增加1。
较高的值也会增加或减少该值,具体取决于它环绕原始范围的次数。
我希望这是有道理的,因为我发现很难解释。
编辑:
不随浮点值振荡:
for (float i = 0; i < 100; i += 0.1f)
{
Console.WriteLine("{0} {1}", i, Oscillate(2.5f, 7.5f, i));
}
private float Oscillate(float min, float max, float value)
{
float range = max - min;
float multiple = value / range;
bool ascending = multiple % 2 == 0;
float modulus = value % range;
return ascending ? modulus + min : max - modulus;
}