Example #1
0
        public void CanComputePower()
        {
            var a = new Complex(1.19209289550780998537e-7, 1.19209289550780998537e-7);
            var b = new Complex(1.19209289550780998537e-7, 1.19209289550780998537e-7);

            AssertHelpers.AlmostEqualRelative(
                new Complex(9.99998047207974718744e-1, -1.76553541154378695012e-6), a.Power(b), 14);
            a = new Complex(0.0, 1.19209289550780998537e-7);
            b = new Complex(0.0, -1.19209289550780998537e-7);
            AssertHelpers.AlmostEqualRelative(new Complex(1.00000018725172576491, 1.90048076369011843105e-6), a.Power(b), 14);
            a = new Complex(0.0, -1.19209289550780998537e-7);
            b = new Complex(0.0, 0.5);
            AssertHelpers.AlmostEqualRelative(new Complex(-2.56488189382693049636e-1, -2.17823120666116144959), a.Power(b), 14);
            a = new Complex(0.0, 0.5);
            b = new Complex(0.0, -0.5);
            AssertHelpers.AlmostEqualRelative(new Complex(2.06287223508090495171, 7.45007062179724087859e-1), a.Power(b), 14);
            a = new Complex(0.0, -0.5);
            b = new Complex(0.0, 1.0);
            AssertHelpers.AlmostEqualRelative(new Complex(3.70040633557002510874, -3.07370876701949232239), a.Power(b), 14);
            a = new Complex(0.0, 2.0);
            b = new Complex(0.0, -2.0);
            AssertHelpers.AlmostEqualRelative(new Complex(4.24532146387429353891, -2.27479427903521192648e1), a.Power(b), 14);
            a = new Complex(0.0, -8.388608e6);
            b = new Complex(1.19209289550780998537e-7, 0.0);
            AssertHelpers.AlmostEqualRelative(new Complex(1.00000190048219620166, -1.87253870018168043834e-7), a.Power(b), 14);
            a = new Complex(0.0, 0.0);
            b = new Complex(0.0, 0.0);
            AssertHelpers.AlmostEqualRelative(new Complex(1.0, 0.0), a.Power(b), 14);
            a = new Complex(0.0, 0.0);
            b = new Complex(1.0, 0.0);
            AssertHelpers.AlmostEqualRelative(new Complex(0.0, 0.0), a.Power(b), 14);

            a = new Complex(0.0, 0.0);
            b = new Complex(-1.0, 0.0);
            AssertHelpers.AlmostEqualRelative(new Complex(double.PositiveInfinity, 0.0), a.Power(b), 14);
            a = new Complex(0.0, 0.0);
            b = new Complex(-1.0, 1.0);
            AssertHelpers.AlmostEqualRelative(new Complex(double.PositiveInfinity, double.PositiveInfinity), a.Power(b), 14);
            a = new Complex(0.0, 0.0);
            b = new Complex(0.0, 1.0);
            Assert.That(a.Power(b).IsNaN());
        }
Example #2
0
        public override Fractal Render()
        {
            Complex c = new Complex(0, 0);

            //System.Numerics.Complex c = new System.Numerics.Complex(-0.39, -0.7);
            _ = Parallel.For(0, width, x =>
            {
                for (int y = 0; y < height; y++)
                {
                    int iterations = 0;
                    double zx      = Helper.Map(x, 0, width, domain[0][0][0], domain[width - 1][0][0]);
                    double zy      = Helper.Map(y, 0, height, domain[0][0][1], domain[0][height - 1][1]);
                    //double lastDistance = 0;
                    double totalDistance = 0;

                    Complex z    = new Complex(zx, zy);
                    Complex last = new Complex(0, 0);//for shading
                    do
                    {
                        last           = z;
                        z              = z.Power(1.5);
                        z              = z.Subtract(0.2);
                        totalDistance += z.Distance(last);
                    }
                    //while (z.Magnitude() <= 2 && iterations++ < highestExposureTarget);
                    while (z.MagnitudeOpt() <= 4 && iterations++ < highestExposureTarget);
                    //lastDistance = z.Distance(last);
                    int index       = x + y * width;
                    exposure[index] = iterations;
                    distance[index] = Math.Log(totalDistance);
                    //distance[index] = (iterations > 51) ? totalDistance : 0;

                    if (highestActual < exposure[index])
                    {
                        //Console.WriteLine(zTemp.Distance(new Complex(0, 0)));
                        highestActual = exposure[index];
                    }
                }
            });

            return(this);
        }
Example #3
0
        public void CanComputePower()
        {
            var a = new Complex(1.19209289550780998537e-7, 1.19209289550780998537e-7);
            var b = new Complex(1.19209289550780998537e-7, 1.19209289550780998537e-7);
            AssertHelpers.AlmostEqualRelative(
                new Complex(9.99998047207974718744e-1, -1.76553541154378695012e-6), a.Power(b), 14);
            a = new Complex(0.0, 1.19209289550780998537e-7);
            b = new Complex(0.0, -1.19209289550780998537e-7);
            AssertHelpers.AlmostEqualRelative(new Complex(1.00000018725172576491, 1.90048076369011843105e-6), a.Power(b), 14);
            a = new Complex(0.0, -1.19209289550780998537e-7);
            b = new Complex(0.0, 0.5);
            AssertHelpers.AlmostEqualRelative(new Complex(-2.56488189382693049636e-1, -2.17823120666116144959), a.Power(b), 14);
            a = new Complex(0.0, 0.5);
            b = new Complex(0.0, -0.5);
            AssertHelpers.AlmostEqualRelative(new Complex(2.06287223508090495171, 7.45007062179724087859e-1), a.Power(b), 14);
            a = new Complex(0.0, -0.5);
            b = new Complex(0.0, 1.0);
            AssertHelpers.AlmostEqualRelative(new Complex(3.70040633557002510874, -3.07370876701949232239), a.Power(b), 14);
            a = new Complex(0.0, 2.0);
            b = new Complex(0.0, -2.0);
            AssertHelpers.AlmostEqualRelative(new Complex(4.24532146387429353891, -2.27479427903521192648e1), a.Power(b), 14);
            a = new Complex(0.0, -8.388608e6);
            b = new Complex(1.19209289550780998537e-7, 0.0);
            AssertHelpers.AlmostEqualRelative(new Complex(1.00000190048219620166, -1.87253870018168043834e-7), a.Power(b), 14);
            a = new Complex(0.0, 0.0);
            b = new Complex(0.0, 0.0);
            AssertHelpers.AlmostEqualRelative(new Complex(1.0, 0.0), a.Power(b), 14);
            a = new Complex(0.0, 0.0);
            b = new Complex(1.0, 0.0);
            AssertHelpers.AlmostEqualRelative(new Complex(0.0, 0.0), a.Power(b), 14);

            a = new Complex(0.0, 0.0);
            b = new Complex(-1.0, 0.0);
            AssertHelpers.AlmostEqualRelative(new Complex(double.PositiveInfinity, 0.0), a.Power(b), 14);
            a = new Complex(0.0, 0.0);
            b = new Complex(-1.0, 1.0);
            AssertHelpers.AlmostEqualRelative(new Complex(double.PositiveInfinity, double.PositiveInfinity), a.Power(b), 14);
            a = new Complex(0.0, 0.0);
            b = new Complex(0.0, 1.0);
            Assert.That(a.Power(b).IsNaN());
        }
Example #4
0
 public ComplexValue Power(ComplexValue exponent)
 {
     return(new ComplexValue(_dataValue.Power(exponent.Value)));
 }
Example #5
0
        public void TestPower()
        {
            // (1)^(1) = 1
            Complex one       = Complex.One;
            Complex onePowOne = one.Power(one);

            Assert.That(onePowOne.Real, Is.EqualTo(1d), "Re{(1)^(1)} = 1");
            Assert.That(onePowOne.Imag, Is.EqualTo(0d), "Im{(1)^(1)} = 0");

            // (i)^(1) = i
            Complex I       = Complex.I;
            Complex IPowOne = I.Power(one);

            Assert.That(IPowOne.Real, NumericIs.AlmostEqualTo(0d), "Re{(i)^(1)} = 0");
            Assert.That(IPowOne.Imag, Is.EqualTo(1d), "Im{(i)^(1)} = 1");

            // (1)^(-1) = 1
            Complex mOne       = -Complex.One;
            Complex onePowMOne = one.Power(mOne);

            Assert.That(onePowMOne.Real, Is.EqualTo(1d), "Re{(1)^(-1)} = 1");
            Assert.That(onePowMOne.Imag, Is.EqualTo(0d), "Im{(1)^(-1)} = 0");

            // (i)^(-1) = -i
            Complex IPowMOne = I.Power(mOne);

            Assert.That(IPowMOne.Real, NumericIs.AlmostEqualTo(0d), "Re{(i)^(-1)} = 0");
            Assert.That(IPowMOne.Imag, Is.EqualTo(-1d), "Im{(i)^(-1)} = -1");

            // (i)^(-i) = exp(Pi/2)
            Complex mI     = -Complex.I;
            Complex IPowMI = I.Power(mI);

            Assert.That(IPowMI.Real, Is.EqualTo(Math.Exp(Constants.Pi_2)), "Re{(i)^(-i)} = exp(Pi/2)");
            Assert.That(IPowMI.Imag, Is.EqualTo(0d), "Im{(i)^(-i)} = 0");

            // (0)^(0) = 1
            Assert.That(Math.Pow(0d, 0d), Is.EqualTo(1d), "(0)^(0) = 1 (.Net Framework Sanity Check)");
            Complex zero        = Complex.Zero;
            Complex zeroPowZero = zero.Power(zero);

            Assert.That(zeroPowZero.Real, Is.EqualTo(1d), "Re{(0)^(0)} = 1");
            Assert.That(zeroPowZero.Imag, Is.EqualTo(0d), "Im{(0)^(0)} = 0");

            // (0)^(2) = 0
            Assert.That(Math.Pow(0d, 2d), Is.EqualTo(0d), "(0)^(2) = 0 (.Net Framework Sanity Check)");
            Complex two        = new Complex(2d, 0d);
            Complex zeroPowTwo = zero.Power(two);

            Assert.That(zeroPowTwo.Real, Is.EqualTo(0d), "Re{(0)^(2)} = 0");
            Assert.That(zeroPowTwo.Imag, Is.EqualTo(0d), "Im{(0)^(2)} = 0");

            // (0)^(-2) = infty
            Assert.That(Math.Pow(0d, -2d), Is.EqualTo(double.PositiveInfinity), "(0)^(-2) = infty (.Net Framework Sanity Check)");
            Complex mTwo        = Complex.FromRealImaginary(-2d, 0d);
            Complex zeroPowMTwo = zero.Power(mTwo);

            Assert.That(zeroPowMTwo.Real, Is.EqualTo(double.PositiveInfinity), "Re{(0)^(-2)} = infty");
            Assert.That(zeroPowMTwo.Imag, Is.EqualTo(0d), "Im{(0)^(-2)} = 0");

            // (0)^(I) = NaN
            Complex zeroPowI = zero.Power(I);

            Assert.That(zeroPowI.Real, Is.NaN, "Re{(0)^(I)} = NaN");
            Assert.That(zeroPowI.Imag, Is.NaN, "Im{(0)^(I)} = NaN");

            // (0)^(-I) = NaN
            Complex zeroPowMI = zero.Power(mI);

            Assert.That(zeroPowMI.Real, Is.NaN, "Re{(0)^(-I)} = NaN");
            Assert.That(zeroPowMI.Imag, Is.NaN, "Im{(0)^(-I)} = NaN");

            // (0)^(1+I) = 0
            Complex onePlusI        = Complex.One + Complex.I;
            Complex zeroPowOnePlusI = zero.Power(onePlusI);

            Assert.That(zeroPowOnePlusI.Real, Is.EqualTo(0d), "Re{(0)^(1+I)} = 0");
            Assert.That(zeroPowOnePlusI.Imag, Is.EqualTo(0d), "Im{(0)^(1+I)} = 0");

            // (0)^(1-I) = 0
            Complex oneMinusI        = Complex.One - Complex.I;
            Complex zeroPowOneMinusI = zero.Power(oneMinusI);

            Assert.That(zeroPowOneMinusI.Real, Is.EqualTo(0d), "Re{(0)^(1-I)} = 0");
            Assert.That(zeroPowOneMinusI.Imag, Is.EqualTo(0d), "Im{(0)^(1-I)} = 0");

            // (0)^(-1+I) = infty + infty * i
            Complex minusOnePlusI        = new Complex(-1d, 1d);
            Complex zeroPowMinusOnePlusI = zero.Power(minusOnePlusI);

            Assert.That(zeroPowMinusOnePlusI.Real, Is.EqualTo(double.PositiveInfinity), "Re{(0)^(-1+I)} = infty");
            Assert.That(zeroPowMinusOnePlusI.Imag, Is.EqualTo(double.PositiveInfinity), "Im{(0)^(-1+I)} = infty");
        }