【发布时间】:2012-07-18 14:28:13
【问题描述】:
我有一条在时间 't' 评估的路径,并根据路径类型返回方向和位置。
时间的值受路径类型的影响:
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;
}
【问题讨论】:
-
我不确定我是否完全理解你的意思,但你可能想看看这个:msdn.microsoft.com/en-us/library/aa970561.aspx 和这个blogs.msdn.com/b/llobo/archive/2009/10/23/…
-
我感觉它会涉及 mod (
%) 和Math.Abs,但我的头很痛。 :) -
这看起来有点接近:fooplot.com/plot/6xbgckbaz5 for + ve 值