繁体   English   中英

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

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

如何使用步骤0.4生成5到10的随机值?

我试过了:

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);

这样的事情怎么样:

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();                
}

因此,我们选择5到10之间的整数,然后向该整数添加0.4到0到12之间的随机数,因为5.0 / 0.4 = 12.5

您是说要让数字为5、5.4、5.8,... 10吗? 由于5和10相隔5,并且不能被0.4整除,因此您将不得不停在9.8或10.2处,或者最后停一小步就停在10。

但是,这是如何获取属于该集合的成员的随机数的方法(在偶数.4步骤中,其范围是5到9.8之间的任何数字)。

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

如果这不是您想要的,请告诉我。

试图生成一个随机的色相来创建真正不同的颜色,所以这里是:

    //***************************************************************************
    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;
    }
    }

用作

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