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