示例#1
0
            public async Task Setup()
            {
                var centre = new Complex(5, 10);
                var range  = new Complex(10, 20);
                var sut    = new ComplexPlaneBuilder();

                _result = await sut.BuildArrayAsync(51, 101, centre, range);
            }
示例#2
0
            public void ThrowsArgumentException(int width, int height)
            {
                var centre = new Complex(0, 0);
                var range  = new Complex(2, 2);
                var sut    = new ComplexPlaneBuilder();

                Assert.ThrowsAsync <ArgumentException>(async() => await sut.BuildArrayAsync(width, height, centre, range), "Dimensions must be > 0.");
            }
示例#3
0
        public async Task Run(string[] args)
        {
            Console.WriteLine("Greg's Fractal renderer test");
            Console.WriteLine("Setting up...");
            var timer = new Stopwatch();

            timer.Start();

            const int width  = 1000; // Real Axis
            const int height = 1000; // Imaginary Axis
            var       centre = new Complex(0m, 0m);
            var       range  = new Complex(3m, 3m);

            var arrayBuilder    = new ComplexPlaneBuilder();
            var bitmapConverter = new ByteArrayToBitmapConverter();
            var iterator        = new Iterator();
            var renderer        = new JuliaRenderer(arrayBuilder, iterator);

            renderer.C = new Complex(0.285m, 0.01m);
            await renderer.SetupAsync(width, height, centre, range);

            Console.WriteLine("Iterating...");
            var iterationTimer = new Stopwatch();

            for (var i = 0; i < 200; i++)
            {
                iterationTimer.Start();
                await renderer.IterateAsync();

                Console.WriteLine($"Iteration {i} complete taking {iterationTimer.Elapsed.TotalSeconds} seconds.");
                iterationTimer.Reset();
            }
            Console.WriteLine("Drawing...");

            var palette = new ColourPalette();

            palette.AddMarker(Colour.Black(), 0);
            palette.AddMarker(Colour.White(), 99.999m);
            palette.AddMarker(Colour.Black(), 100);

            // Get byte array of 32bpp colour data
            var imageBytes = await renderer.Get32BppImageByteArrayAsync(palette);

            // Convert byte array to bitmap
            var image = await bitmapConverter.ConvertAsync(imageBytes, width, height);

            // Encode to png
            var imageData = image.Encode(SKEncodedImageFormat.Png, int.MaxValue);

            // Save to file system
            await using var fs = new FileStream($@"C:\FractalOutput\Julia{DateTime.Now:yyyyMMddHHmmss}.png", FileMode.CreateNew);
            imageData.SaveTo(fs);

            Console.WriteLine($"Finished, took {timer.Elapsed.TotalSeconds} seconds.");
        }
示例#4
0
            public async Task Setup()
            {
                var centre = new Complex(0, 0);
                var range  = new Complex(2, 2);
                var sut    = new ComplexPlaneBuilder();

                _result = await sut.BuildArrayAsync(3, 3, centre, range);

                _expected = new Complex[, ]
                {
                    { new Complex(-1, -1), new Complex(-1, 0), new Complex(-1, 1) },
                    { new Complex(0, -1), new Complex(0, 0), new Complex(0, 1) },
                    { new Complex(1, -1), new Complex(1, 0), new Complex(1, 1) },
                };
            }