简体   繁体   English

如何在C#中使用step平滑Random?

[英]How to do smooth Random in C# with step?

How to generate random value from 5 to 10 with step 0.4? 如何使用步骤0.4生成5到10的随机值?

I tried: 我试过了:

var numberOfSteps = 0.4;
var _step = (maximum - minimum) / numberOfSteps;
var difference = maximum - minimum;
var stepsToDifference = Math.Round(difference / _step);
return Convert.ToString(minimum + _step * stepsToDifference);

How about something like this: 这样的事情怎么样:

Random rand = new Random();
int intPart = 0;
int multiplesOfPointFour = 0;
bool doAgain = true;
double finalValue = 0.0;
while (doAgain)
{
    intPart = rand.Next(5, 8);
    multiplesOfPointFour = rand.Next(0, 6);
    finalValue = intPart + (multiplesOfPointFour * 0.4);
    Console.WriteLine("Value is: " + finalValue.ToString());
    Console.Write("Press any key to go again...");
    Console.ReadKey();                
}

So we pick an integer between 5 and 10 and then add 0.4 a random number of times between 0 and 12 to that integer, because 5.0 / 0.4 = 12.5 因此,我们选择5到10之间的整数,然后向该整数添加0.4到0到12之间的随机数,因为5.0 / 0.4 = 12.5

Do you mean you want the number to be 5, 5.4, 5.8, ... 10? 您是说要让数字为5、5.4、5.8,... 10吗? As 5 and 10 are 5 apart and not evenly divisible by .4, you will have to either stop at 9.8 or at 10.2 or stop at 10 with a short step at the last. 由于5和10相隔5,并且不能被0.4整除,因此您将不得不停在9.8或10.2处,或者最后停一小步就停在10。

But here is how you can get a random number that is a member of that set (will be any number from 5 to 9.8 on the even .4 step). 但是,这是如何获取属于该集合的成员的随机数的方法(在偶数.4步骤中,其范围是5到9.8之间的任何数字)。

Random rand = new Random();
float randomInSet = ((float)rand.Next(0,12)*.4)+5;

Please let me know if this is not what you had in mind. 如果这不是您想要的,请告诉我。

Was trying to generate a random Hue to create really different colors, so here it is: 试图生成一个随机的色相来创建真正不同的颜色,所以这里是:

    //***************************************************************************
    public static partial class RndExtensions
    //***************************************************************************
    {
    //-------------------------------------------------------------
    public static double NextDouble(this Random rnd, double from, double to, double step)
    //-------------------------------------------------------------
    {
        var delta = to - from;
        var nbOfSteps = (int)(delta / step);
        var randomStep = rnd.Next(0, nbOfSteps);
        return step*randomStep + from; 
    }
    //-------------------------------------------------------------
    public static double Next(this Random rnd, int from, int to, int step)
    //-------------------------------------------------------------
    {
        var delta = to - from;
        var nbOfSteps = (int)(delta / step);
        var randomStep = rnd.Next(0, nbOfSteps);
        return step * randomStep + from;
    }
    }

Used as 用作

Random rnd = new Random();
var randomHue = rnd.NextDouble(0, 359, 25);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM