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(); }
/// <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; } } } }
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(); }
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(); }
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"); }
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); }
public Complex(LongFloat re, LongFloat im) { Re = re; Im = im; }