Exemplo n.º 1
0
        private static void InterpolationSnippets()
        {
            var interpolation = new Interpolation();

            interpolation.Add(1, 2);
            interpolation.Add(5, 8);
            interpolation.Add(7.7, 5);
            interpolation.Add(10, 15);
            interpolation.Add(11, 11.3);

            Console.WriteLine($"Value;Linear;Spline;Cosine");

            for (int n = 10; n < 111; n++)
            {
                double interpolatedValueLinear = interpolation.Linear(n / 10.0);
                double interpolatedValueSpline = interpolation.Spline(n / 10.0);
                double interpolatedValueCosine = interpolation.Cosine(n / 10.0);


                if (n == 10 || n == 50 || n == 77 || n == 100 || n == 110)
                {
                    Console.ForegroundColor = ConsoleColor.Green;
                }

                Console.WriteLine($"{n / 10.0:N1};{interpolatedValueLinear:N3};{interpolatedValueSpline:N3};{interpolatedValueCosine:N3}");

                Console.ResetColor();
            }
        }
Exemplo n.º 2
0
        private static void InterpolationSnippetsRandomPoints()
        {
            var interpolation = new Interpolation();

            var random = new Random();

            double startingX = random.NextDouble() * 10.0;
            double x         = startingX;

            int xStartInterval = (int)Math.Ceiling(startingX * 10.0);
            int xEndInterval   = (int)Math.Floor(x * 10.0) - 1;

            //add 10 random points
            for (int n = 0; n < 30; n++)
            {
                double y = random.NextDouble() * 50.0;
                interpolation.Add(x, y);

                xEndInterval = (int)Math.Floor(x * 10.0) - 1;
                x           += random.NextDouble() * 10.0;
                x           += 1.0; //ensure the horizontal distance, not needed, but because it's random values
            }

            Console.WriteLine($"Value;Linear;Spline;Cosine");

            for (int n = xStartInterval; n < xEndInterval; n++)
            {
                double interpolatedValueLinear = interpolation.Linear(n / 10.0);
                double interpolatedValueSpline = interpolation.Spline(n / 10.0);
                double interpolatedValueCosine = interpolation.Cosine(n / 10.0);

                Console.WriteLine($"{n / 10.0:N1};{interpolatedValueLinear:N3};{interpolatedValueSpline:N3};{interpolatedValueCosine:N3}");
            }
        }
Exemplo n.º 3
0
        public void InterpolationCosine()
        {
            var _interpolation = new Interpolation();

            _interpolation.Cosine();

            _interpolation.Add(0, 5);
            _interpolation.Add(2, -5);
            _interpolation.Add(4, 6);

            Assert.AreEqual(0, _interpolation.Interpolate(1), 0.01, "Cosine interpolation at x=0 failed!");
            Assert.AreEqual(0.5, _interpolation.Interpolate(3), 0.01, "Cosine interpolation at x=3 failed!");
            Assert.AreEqual(4.3891, _interpolation.Interpolate(3.5), 0.01, "Cosine interpolation at x=3.5 failed!");
        }
        public Perlin1D(int seed, int numOctaves, int width, int baseWl)
        {
            nOctaves   = numOctaves;
            this.width = width;

            //Instantiate a random number generator with the specified seed
            rng = new System.Random(seed);

            noise = new double[width];

            for (int i = 0; i < width; i++)
            {
                noise [i] = 0;
            }

            float amplitude  = 1.0f;
            int   waveLength = baseWl;

            for (int i = 0; i < numOctaves; i++)
            {
                double[] values = new double[width];

                double prevRng = 0;
                double nextRng = rng.NextDouble();

                for (int x = 0; x < width; x++)
                {
                    //If we have done a full period, generate a new random number and use it
                    if (x % waveLength == 0)
                    {
                        prevRng = nextRng;
                        nextRng = rng.NextDouble();

                        values [x] = prevRng * amplitude;
                    }
                    //Otherwise use cosine interpolation between the last generated point and next point to be generated
                    else
                    {
                        values [x] = Interpolation.Cosine((float)prevRng, (float)nextRng, (float)((x % waveLength) / (float)waveLength)) * amplitude;
                    }
                    noise [x] += values [x];
                }

                //For every octave we halve the wavelength and halve the amplitude
                amplitude /= 2;
                waveLength = Mathf.Max(1, waveLength / 2);
            }
        }
Exemplo n.º 5
0
        private static void InterpolationSnippetsActualTemperature()
        {
            var interpolation = new Interpolation();

            #region [Temperature Points]
            interpolation.Add(0, 24.9);
            interpolation.Add(10, 24.8);
            interpolation.Add(20, 24.8);
            interpolation.Add(29, 24.8);
            interpolation.Add(40, 24.9);
            interpolation.Add(50, 25.1);
            interpolation.Add(60, 25.3);
            interpolation.Add(69, 25.4);
            interpolation.Add(79, 25.6);
            interpolation.Add(90, 25.7);
            interpolation.Add(100, 25.8);
            interpolation.Add(110, 25.7);
            interpolation.Add(120, 25.8);
            interpolation.Add(129, 25.7);
            interpolation.Add(140, 25.6);
            interpolation.Add(150, 25.4);
            interpolation.Add(160, 25.2);
            interpolation.Add(169, 25);
            interpolation.Add(180, 24.8);
            interpolation.Add(190, 24.6);
            interpolation.Add(200, 24.5);
            interpolation.Add(210, 24.4);
            interpolation.Add(220, 24.2);
            interpolation.Add(229, 24.1);
            interpolation.Add(239, 23.9);
            interpolation.Add(250, 23.8);
            interpolation.Add(260, 23.7);
            interpolation.Add(269, 23.6);
            interpolation.Add(280, 23.4);
            interpolation.Add(290, 23.2);
            interpolation.Add(300, 22.9);
            interpolation.Add(309, 22.6);
            interpolation.Add(320, 22.4);
            interpolation.Add(330, 22.1);
            interpolation.Add(339, 21.9);
            interpolation.Add(350, 21.9);
            interpolation.Add(360, 21.8);
            interpolation.Add(370, 21.7);
            interpolation.Add(380, 21.7);
            interpolation.Add(390, 21.7);
            interpolation.Add(400, 21.6);
            interpolation.Add(409, 21.5);
            interpolation.Add(419, 21.3);
            interpolation.Add(430, 21.2);
            interpolation.Add(440, 21.1);
            interpolation.Add(449, 21);
            interpolation.Add(460, 20.9);
            interpolation.Add(470, 20.8);
            interpolation.Add(479, 20.7);
            interpolation.Add(490, 20.4);
            interpolation.Add(500, 20.3);
            interpolation.Add(509, 20.2);
            interpolation.Add(520, 19.9);
            interpolation.Add(530, 19.7);
            interpolation.Add(539, 19.6);
            interpolation.Add(550, 19.4);
            interpolation.Add(554, 19.4);
            interpolation.Add(570, 19.3);
            interpolation.Add(580, 19.3);
            interpolation.Add(589, 19.3);
            interpolation.Add(600, 19.2);
            interpolation.Add(604, 19.2);
            interpolation.Add(620, 19.2);
            interpolation.Add(629, 19.1);
            interpolation.Add(640, 19.1);
            interpolation.Add(650, 19.1);
            interpolation.Add(659, 19.1);
            interpolation.Add(670, 19.1);
            interpolation.Add(680, 19);
            interpolation.Add(690, 18.9);
            interpolation.Add(700, 18.9);
            interpolation.Add(709, 18.8);
            interpolation.Add(720, 18.8);
            interpolation.Add(730, 18.8);
            interpolation.Add(740, 18.8);
            interpolation.Add(749, 18.8);
            interpolation.Add(760, 18.7);
            interpolation.Add(770, 18.7);
            interpolation.Add(775, 18.7);
            interpolation.Add(789, 18.6);
            interpolation.Add(800, 18.6);
            interpolation.Add(810, 18.6);
            interpolation.Add(819, 18.6);
            interpolation.Add(829, 18.6);
            interpolation.Add(840, 18.6);
            interpolation.Add(850, 18.6);
            interpolation.Add(859, 18.6);
            interpolation.Add(870, 18.6);
            interpolation.Add(880, 18.6);
            interpolation.Add(889, 18.7);
            interpolation.Add(899, 18.7);
            interpolation.Add(910, 18.7);
            interpolation.Add(919, 18.6);
            interpolation.Add(930, 18.5);
            interpolation.Add(940, 18.6);
            interpolation.Add(950, 18.6);
            interpolation.Add(959, 18.6);
            interpolation.Add(970, 18.6);
            interpolation.Add(980, 18.4);
            interpolation.Add(989, 18.4);
            interpolation.Add(1000, 18.2);
            interpolation.Add(1010, 18);
            interpolation.Add(1019, 17.8);
            interpolation.Add(1030, 17.6);
            interpolation.Add(1040, 17.4);
            interpolation.Add(1049, 17.3);
            interpolation.Add(1060, 17.3);
            interpolation.Add(1069, 17.4);
            interpolation.Add(1080, 17.3);
            interpolation.Add(1090, 17.3);
            interpolation.Add(1100, 17.4);
            interpolation.Add(1109, 17.4);
            interpolation.Add(1120, 17.5);
            interpolation.Add(1129, 17.5);
            interpolation.Add(1139, 17.4);
            interpolation.Add(1150, 17.6);
            interpolation.Add(1159, 17.7);
            interpolation.Add(1170, 17.7);
            interpolation.Add(1180, 17.7);
            interpolation.Add(1190, 17.7);
            interpolation.Add(1199, 17.7);
            interpolation.Add(1210, 17.7);
            interpolation.Add(1219, 17.7);
            interpolation.Add(1230, 17.9);
            interpolation.Add(1240, 18);
            interpolation.Add(1249, 18.2);
            interpolation.Add(1260, 18.3);
            interpolation.Add(1270, 18.2);
            interpolation.Add(1279, 18.3);
            interpolation.Add(1289, 18.6);
            interpolation.Add(1300, 18.7);
            interpolation.Add(1310, 18.9);
            interpolation.Add(1319, 19.2);
            interpolation.Add(1329, 19.3);
            interpolation.Add(1340, 19.4);
            interpolation.Add(1350, 19.4);
            interpolation.Add(1359, 19.6);
            interpolation.Add(1370, 19.8);
            interpolation.Add(1380, 19.9);
            interpolation.Add(1390, 20.1);
            interpolation.Add(1400, 20.3);
            interpolation.Add(1409, 20.4);
            interpolation.Add(1419, 20.6);
            interpolation.Add(1429, 20.6);
            #endregion

            Console.WriteLine($"Value;Linear;Spline;Cosine");

            for (int n = 0; n < 1430; n++)
            {
                double interpolatedValueLinear = interpolation.Linear(n);
                double interpolatedValueSpline = interpolation.Spline(n);
                double interpolatedValueCosine = interpolation.Cosine(n);

                Console.WriteLine($"{n:N1};{interpolatedValueLinear:N3};{interpolatedValueSpline:N3};{interpolatedValueCosine:N3}");
            }
        }