Example #1
0
        private void btnZoomOut_Click(object sender, EventArgs e)
        {
            if (_zoom <= 0)
            {
                LongFloat dx = (_xmax - _xmin) * LongFloat.FromDouble(1.0 / cStep);
                LongFloat dy = (_ymax - _ymin) * LongFloat.FromDouble(1.0 / cStep);

                _xmin -= dx;
                _xmax += dx;
                _ymin -= dy;
                _ymax += dy;

                _zoom--;
            }
            else
            {
                LongFloat csOne = LongFloat.FromDouble(cStep - 1);
                LongFloat div   = LongFloat.FromDouble(1.0 / (cStep - 2));

                LongFloat xmax = (csOne * _xmax - _xmin) * div;
                LongFloat xmin = (csOne * _xmin - _xmax) * div;
                LongFloat ymax = (csOne * _ymax - _ymin) * div;
                LongFloat ymin = (csOne * _ymin - _ymax) * div;

                _xmin = xmin;
                _xmax = xmax;
                _ymin = ymin;
                _ymax = ymax;

                _zoom++;
            }

            UpdateFractal();
        }
Example #2
0
        /// <summary>
        /// Заполнение массива изображения.
        /// </summary>
        /// <param name="xmin">Минимальное значение X.</param>
        /// <param name="xmax">Максимальное значение X.</param>
        /// <param name="ymin">Минимальное значение Y.</param>
        /// <param name="ymax">Максимальное значение Y.</param>
        /// <param name="width">Ширина изображения.</param>
        /// <param name="height">Высота изображения.</param>
        /// <param name="fractal">Фрактал.</param>
        /// <param name="start">Стартовое значение по оси Y.</param>
        /// <param name="stop">Конечное значение по оси Y.</param>
        /// <param name="rgbValues">Массив ппикселей для изображения.</param>
        /// <param name="colors">Список цветов.</param>
        /// <param name="stride">Stride изображения.</param>
        static void FillArray(LongFloat xmin, LongFloat xmax, LongFloat ymin, LongFloat ymax, int width, int height,
                              AbstractDynamicFractal fractal, int start, int stop, byte[] rgbValues, List <Color> colors, int stride)
        {
            fractal.MaxIterationCount = colors.Count;

            LongFloat kx = (xmax - xmin) * LongFloat.FromDouble(1.0 / (width - 1));
            LongFloat ky = (ymin - ymax) * LongFloat.FromDouble(1.0 / (height - 1));

            for (int x = 0; x < width; x++)
            {
                LongFloat xlf = kx * LongFloat.FromDouble(Convert.ToDouble(x)) + xmin;

                for (int y = start; y <= stop; y++)
                {
                    LongFloat ylf = ky * LongFloat.FromDouble(Convert.ToDouble(y)) + ymax;
                    fractal.Start = new Complex(xlf, ylf);
                    int index = fractal.GetIteration();

                    if (index >= 0)
                    {
                        rgbValues[y * stride + x * 3 + 0] = colors[index].B;
                        rgbValues[y * stride + x * 3 + 1] = colors[index].G;
                        rgbValues[y * stride + x * 3 + 2] = colors[index].R;
                    }
                }
            }
        }
Example #3
0
        private void button1_Click(object sender, EventArgs e)
        {
            _xmin = LongFloat.FromDouble(_dxmin);
            _xmax = LongFloat.FromDouble(_dxmax);
            _ymin = LongFloat.FromDouble(_dymin);
            _ymax = LongFloat.FromDouble(_ydmax);

            UpdateFractal();
        }
Example #4
0
        private void btnRight_Click(object sender, EventArgs e)
        {
            LongFloat lfStep = LongFloat.FromDouble(1.0 / cStep);
            LongFloat s      = (_xmax - _xmin) * lfStep;

            _xmax += s;
            _xmin += s;

            UpdateFractal();
        }
Example #5
0
        public void Run()
        {
            _testNumber = 1;
            _success    = 0;
            _failed     = 0;

            double[]  arr = { 0.123, 456.657, 1001, -1.29, 0.06757, -0.34 };
            double    d1, d2;
            LongFloat lf1, lf2;

            System.Diagnostics.Stopwatch stopWatch = new System.Diagnostics.Stopwatch();
            stopWatch.Start();

            for (int i = 0; i < arr.Length; i++)
            {
                for (int j = 0; j < arr.Length; j++)
                {
                    d1 = arr[i];
                    d2 = arr[j];

                    lf1 = new LongFloat(d1.ToString());
                    lf2 = new LongFloat(d2.ToString());

                    // арифметика
                    WriteResult((lf1 + lf2).ToString() == (d1 + d2).ToString(), _testNumber++);
                    WriteResult((lf2 + lf1).ToString() == (d1 + d2).ToString(), _testNumber++);
                    WriteResult((lf1 * lf2).ToString() == (d1 * d2).ToString(), _testNumber++);
                    WriteResult((lf2 * lf1).ToString() == (d2 * d1).ToString(), _testNumber++);
                    WriteResult((lf1 - lf2).ToString() == (d1 - d2).ToString(), _testNumber++);
                    WriteResult((lf2 - lf1).ToString() == (d2 - d1).ToString(), _testNumber++);
                    WriteResult((-lf1).ToString() == (-d1).ToString(), _testNumber++);
                    WriteResult((-lf2).ToString() == (-d2).ToString(), _testNumber++);

                    // сравнение
                    WriteResult((lf1 < lf2) == (d1 < d2), _testNumber++);
                    WriteResult((lf1 > lf2) == (d1 > d2), _testNumber++);
                    WriteResult((lf1 == lf2) == (d1 == d2), _testNumber++);
                    WriteResult((lf1 <= lf2) == (d1 <= d2), _testNumber++);
                    WriteResult((lf1 >= lf2) == (d1 >= d2), _testNumber++);
                }
            }

            stopWatch.Stop();

            // тесты завершены
            Console.WriteLine();
            Console.WriteLine(string.Format("Total tests: \t {0}", _testNumber - 1));
            Console.WriteLine(string.Format("Successful: \t {0}", _success));
            Console.WriteLine(string.Format("Failed: \t {0}", _failed));
            Console.WriteLine(string.Format("Time elapsed: \t {0} ms", stopWatch.Elapsed.Seconds * 1000 + stopWatch.Elapsed.Milliseconds));
            Console.WriteLine();
            Console.WriteLine("Press ENTER to continue");
        }
Example #6
0
        public static Complex operator ^(Complex a, int power)
        {
            LongFloat one  = LongFloat.FromDouble(1);
            LongFloat zero = LongFloat.FromDouble(0);

            Complex result = new Complex(one, zero);

            for (int i = 0; i < power; i++)
            {
                result *= a;
            }

            return(result);
        }
Example #7
0
 public Complex(LongFloat re, LongFloat im)
 {
     Re = re;
     Im = im;
 }