Beispiel #1
0
        public static Sampler MakeSampler(string name, ParamSet paramSet, Film film)
        {
            Sampler sampler = null;

            switch (name)
            {
            //case "lowdiscrepancy":
            //case "02sequence":
            //  sampler = CreateZeroTwoSequenceSampler(paramSet);
            //  break;
            //case "maxmindist":
            //  sampler = CreateMaxMinDistSampler(paramSet);
            //  break;
            //case "halton":
            //  sampler = CreateHaltonSampler(paramSet, film.GetSampleBounds());
            //  break;
            //case "sobol":
            //  sampler = CreateSobolSampler(paramSet, film.GetSampleBounds());
            //  break;
            case "random":
                sampler = RandomSampler.Create(paramSet);
                break;

            //case "stratified":
            //  sampler = CreateStratifiedSampler(paramSet);
            //  break;
            default:
                //Warning("Sampler \"%s\" unknown.", name.c_str());
                break;
            }

            paramSet.ReportUnused();
            return(sampler);
        }
Beispiel #2
0
        public void TestRandomVsPoissonVisually()
        {
            Vector2 region = new Vector2(400, 400);
            var     radius = 20;

            List <Vector2> poissonPoints = PoissonDiscSampler.GeneratePoints(radius, region, 30);

            foreach (var point in poissonPoints)
            {
                Assert.IsTrue(point.X >= 0 && point.X < region.X, $"Point {point.X} not in X region 0,{region.X}");
                Assert.IsTrue(point.Y >= 0 && point.Y < region.Y, $"Point {point.Y} not in Y region 0,{region.Y}");
            }

            List <Vector2> randomPoints = RandomSampler.GeneratePoints(poissonPoints.Count, region);

            {   //draw poission samples
                ImageDrawing imageDrawing = new ImageDrawing((int)region.X, (int)region.Y);
                imageDrawing.Clear(Color.Transparent);
                imageDrawing.FillCircles(poissonPoints, radius, Color.Black);
                imageDrawing.SaveImage("comp_2_poisson_disc.png");
            }

            {   // draw random samples
                ImageDrawing imageDrawing = new ImageDrawing((int)region.X, (int)region.Y);
                imageDrawing.Clear(Color.Transparent);
                imageDrawing.FillCircles(randomPoints, radius, Color.Black);
                imageDrawing.SaveImage("comp_1_random.png");
            }

            Console.WriteLine($"Generated {poissonPoints.Count} points.");
        }
        public void Random_resurns_as_many_items_as_SampleSize()
        {
            // arrange
            const int SampleSize      = 10;
            var       collectionOf100 = Enumerable.Range(0, 100).ToList();
            var       sut             = new RandomSampler(SampleSize, collectionOf100.Count);

            // act
            var result = sut.Random(collectionOf100);

            result.Should().HaveCount(SampleSize);
            result.Should().OnlyHaveUniqueItems();
        }
        public void Random_returns_input_when_SampleSize_is_greater_or_equeal_ItemsCount()
        {
            // arrange
            var       collectionOf10 = Enumerable.Range(0, 10).ToList();
            const int SampleSize     = 100;
            var       sut            = new RandomSampler(SampleSize, collectionOf10.Count);

            // act
            var result = sut.Random(collectionOf10);

            // assert
            result.Should().BeEquivalentTo(collectionOf10);
        }
        public void Random_should_reduce_dataset_to_get_samples()
        {
            // arrange
            var       collectionOf10_000 = Enumerable.Range(0, 10_000).ToList();
            const int SampleSize         = 2;
            var       sut = new RandomSampler(SampleSize, collectionOf10_000.Count);

            // act
            var result = sut.Random(collectionOf10_000.Take(1000).ToList());

            // assert
            var dataShouldUsedForSamples = collectionOf10_000.Take(20).ToList();

            //result.Should().OnlyContain(x => dataShouldUsedForSamples.Contains(x)); //burilovmv: why???
            result.Should().HaveCount(SampleSize);
        }
Beispiel #6
0
        public static Sampler LoadSampler(string str_sampler)
        {
            Sampler toReturn;
            //Determine sampler type and load accordingly.
            if (str_sampler.Equals("regular"))
                toReturn = new RegularSampler(GlobalVars.NUM_SAMPLES);
            else if (str_sampler.Equals("random"))
                toReturn = new RandomSampler(GlobalVars.NUM_SAMPLES);
            else if (str_sampler.Equals("jittered"))
                toReturn = new JitteredSampler(GlobalVars.NUM_SAMPLES);
            else if (str_sampler.Equals("nrooks"))
                toReturn = new NRooksSampler(GlobalVars.NUM_SAMPLES);
            else if (str_sampler.Equals("multijittered"))
                toReturn = new MultiJitteredSampler(GlobalVars.NUM_SAMPLES);
            else
            {
                Console.WriteLine("Unknown sampler type: " + str_sampler);
                toReturn = new RegularSampler(GlobalVars.NUM_SAMPLES);
            }

            toReturn.GenerateSamples();
            toReturn.SetupShuffledIndices();
            return toReturn;
        }