变量的新值接近旧值

时间:2017-11-11 16:41:10

标签: c#

我试图让变量的新值接近变量的旧值。

bool FirstPos = true;
float LastPos = 0;
float LeftPos = -2.6f;

if(FirstPos)
{
   LeftPos = Random.Range(-2.6f, 1f);
   LastPos = LeftPos;
   FirstPos = false;
} else
{
   AddValue = Random.Range(0, 1.25f);
   NewValue = LastPos + AddValue;

   if((NewValue >= -2.6f) && (NewValue <= 1f)){
       LastPos = NewValue;
   } else {
       AddValue = Random.Range(0, 1.25f);
   } 
}

但我真的不知道如何让它工作并尽可能简单。

情景:

CurrentValue = Random.Range(-2.6f, 1f);
//CurrentValue returns -2.4 as value

NewValue返回(-2.4 + 2)(-2.4 - 2)之间的数字 但它不能低于-2.6或高于1,因为新值必须介于这两个数字之间,但也接近旧数字。

在这种情况下,

2是添加到新值的最高数字。

1 个答案:

答案 0 :(得分:1)

您可以执行以下操作:

private static float GetNextRandomValue(Random random, 
                                        float current, 
                                        float absoluteOffset, 
                                        float floor = float.MinValue, 
                                        float ceiling = float.MaxValue)
{
    var next = (float)(current + absoluteOffset * (2 * random.NextDouble() - 1));
    return next > ceiling ? ceiling : (next < floor ? floor : next);
}

}

并且,根据您在评论中的示例,您可以将其称为:

var rnd = new Random();
GetNextRandomValue(rnd, -2.2f, 1.2f, -2.6f);