示例#1
0
        public RandomnessTexture(GraphicsState graphics)
        {
            const int size = 2048;

            var rf = graphics.Device.ResourceFactory;

            Texture = rf.CreateTexture(new TextureDescription(size, size, 1, 1, 1, PixelFormat.R32_G32_B32_A32_Float,
                                                              TextureUsage.Sampled, TextureType.Texture2D));
            Sampler = rf.CreateSampler(new SamplerDescription(SamplerAddressMode.Wrap, SamplerAddressMode.Wrap,
                                                              SamplerAddressMode.Wrap, SamplerFilter.MinPoint_MagPoint_MipPoint, null, 0, 0, 0, 0,
                                                              SamplerBorderColor.TransparentBlack));
            ResourceLayout = rf.CreateResourceLayout(new ResourceLayoutDescription(
                                                         new ResourceLayoutElementDescription(nameof(Texture), ResourceKind.TextureReadOnly,
                                                                                              ShaderStages.Compute | ShaderStages.Fragment | ShaderStages.Vertex),
                                                         new ResourceLayoutElementDescription(nameof(Sampler), ResourceKind.Sampler,
                                                                                              ShaderStages.Compute | ShaderStages.Fragment | ShaderStages.Vertex)
                                                         ));
            ResourceSet = rf.CreateResourceSet(new ResourceSetDescription(ResourceLayout, Texture, Sampler));

            var random  = new TRandom(42);
            var texture = new RgbaFloat[size * size];

            for (var i = 0; i < size * size; i++)
            {
                var vec = Vector2.Normalize(new Vector2((float)random.Normal(0, 1), (float)random.Normal(0, 1)))
                          * (float)random.NextDouble().Squared().Squared().Squared() * 2;
                texture[i] = new RgbaFloat(
                    vec.X, vec.Y, (float)random.NextDouble(), (float)random.NextDouble()
                    );
            }

            graphics.Device.UpdateTexture(Texture, texture, 0, 0, 0, size, size, 1, 0, 0);
        }
示例#2
0
 public static TimeSpan ExponentialBackoff(int attempt, TimeSpan? firstWait = null)
 {
     var firstWaitValue = firstWait ?? 200.Milliseconds();
       var waitValue = firstWaitValue.TotalMilliseconds * Math.Pow(2, attempt - 1);
       var waitWithRandomness = _rand.Normal(waitValue, waitValue * DeviationPercent).Milliseconds();
       if (waitWithRandomness < MinWait) waitWithRandomness = MinWait;
       return waitWithRandomness;
 }
示例#3
0
        public void DoDraw()
        {
            int gamesPlayed = (int)Math.Round(trng.Normal(gameCntMean, gameCntStDev));

            int[] nums    = rng.NextUniqueInts(8, 1, 46).ToArray();
            int[] winNums = nums.Take(6).ToArray();
            int[] supNums = nums.TakeLast(2).ToArray();

            Result = new DrawResult(winNums, supNums, gamesPlayed);
        }
示例#4
0
        public static uint getDivisionPointBetween(uint init, uint end)
        {
            float middle        = (float)(init + end) / 2.0f;
            float lengthBetween = (float)end - init + 1.0f;
            int   divisionPoint;

            do
            {
                // Why 6.0f ? Because we want most streets next to middle point
                divisionPoint = (int)(random.Normal(middle, lengthBetween / 6.0f) +
                                      .5d);
            } while (!isDivisionPointValidBetween(divisionPoint, init, end));
            return((uint)divisionPoint);
        }
示例#5
0
        public static void Main()
        {
            // 1) Use TRandom to generate a few random numbers - via IGenerator methods.
            Console.WriteLine("TRandom in action, used as an IGenerator");
            var trandom = new TRandom();

            Console.WriteLine(trandom.Next() - trandom.Next(5) + trandom.Next(3, 5));
            Console.WriteLine(trandom.NextDouble() * trandom.NextDouble(5.5) * trandom.NextDouble(10.1, 21.9));
            Console.WriteLine(trandom.NextBoolean());

            Console.WriteLine();

            // 2) Use TRandom to generate a few random numbers - via extension methods.
            Console.WriteLine("TRandom in action, used as an IGenerator augmented with extension methods");
            Console.WriteLine(string.Join(", ", trandom.Integers().Take(10)));
            Console.WriteLine(string.Join(", ", trandom.Doubles().Take(10)));
            Console.WriteLine(string.Join(", ", trandom.Booleans().Take(10)));

            Console.WriteLine();

            // 3) Use TRandom to generate a few distributed numbers.
            Console.WriteLine("TRandom in action, used as to get distributed numbers");
            Console.WriteLine(trandom.Normal(1.0, 0.1));
            Console.WriteLine(string.Join(", ", trandom.NormalSamples(1.0, 0.1).Take(20)));
            Console.WriteLine(trandom.Poisson(5));
            Console.WriteLine(string.Join(", ", trandom.PoissonSamples(5).Take(20)));

            Console.WriteLine();

            // 4) There are many generators available - XorShift128 is the default.
            var alf = new ALFGenerator(TMath.Seed());
            var nr3 = new NR3Generator();
            var std = new StandardGenerator(127);

            // 5) You can also use distribution directly, even with custom generators.
            Console.WriteLine("Showcase of some distributions");
            Console.WriteLine("Static sample for Normal: " + NormalDistribution.Sample(alf, 1.0, 0.1));
            Console.WriteLine("New instance for Normal: " + new NormalDistribution(1.0, 0.1).NextDouble());

            Console.WriteLine();
        }