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 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); }