public Bitmap Draw(IFractalBase FractalParam) { var fractal = FractalParam as MandelbrotFractal; FastBitmap pic = new FastBitmap(fractal.Width, fractal.Height); double tempx; _dx = (fractal.Xmax - fractal.Xmin) / fractal.Width; _dy = (fractal.Ymax - fractal.Ymin) / fractal.Height; fractal.ORealX = fractal.Xmin; for (int i = 1; i < fractal.Width; i++) { fractal.OImY = fractal.Ymin; for (int j = 1; j < fractal.Height; j++) { fractal.RealX = 0; fractal.ImY = 0; int l; for (l = 0; l < fractal.MaxIterations && ((fractal.RealX * fractal.RealX) + (fractal.ImY * fractal.ImY)) < 4; l++) { tempx = (fractal.RealX * fractal.RealX) - (fractal.ImY * fractal.ImY) + fractal.ORealX; fractal.ImY = 2 * fractal.RealX * fractal.ImY + fractal.OImY; fractal.RealX = tempx; } pic.SetPixel(i, j, Color.FromArgb(255, (l * 9) % 255, 0, (l * 9) % 255)); fractal.OImY += _dy; } fractal.ORealX += _dx; } return(pic); }
public Bitmap Draw(IFractalBase fractalParam) { var fractal = fractalParam as JuliaFractal; if (fractal == null) { throw new Exception("F"); } var pic = new Bitmap(fractal.Width, fractal.Height); for (int x = 0; x < fractal.Width - 1; x++) { for (int y = 0; y < fractal.Height - 1; y++) { fractal.RealX = 1.5 * (x - fractal.Width / 2) / (fractal.Width * 0.5); fractal.ImY = (y - fractal.Height / 2) / (fractal.Height * 0.5); int i; for (i = 0; i < fractal.MaxIterations; i++) { fractal.ORealX = fractal.RealX; fractal.OImY = fractal.ImY; fractal.RealX = fractal.ORealX * fractal.ORealX - fractal.OImY * fractal.OImY + fractal.Cx; fractal.ImY = 2 * fractal.ORealX * fractal.OImY + fractal.Cy; if ((fractal.RealX * fractal.RealX + fractal.ImY * fractal.ImY) > 4) { break; } } pic.SetPixel(x, y, Color.FromArgb(255, (i * 9) % 255, 0, (i * 9) % 255)); } } return(pic); }
/// <summary> /// Обработка события смены вкладки. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void tabControl1_SelectedIndexChanged(object sender, EventArgs e) { if (_fractalviewmodels.ContainsKey(tabControl1.SelectedIndex)) { _selectedFractal = _fractalviewmodels[tabControl1.SelectedIndex].Fractal; } }
public Bitmap Draw(IFractalBase FractalParam) { var fractal = FractalParam as JuliaFractal; FastBitmap picture = new FastBitmap(fractal.Width, fractal.Height); var points = Enumerable.Range(0, fractal.Width * fractal.Height).AsParallel().Select(Calculations); foreach (point i in points) { picture.SetPixel(i.x, i.y, i.color); } return(picture); point Calculations(int pixel) { double RealX = fractal.RealX; double ImY = fractal.ImY; double ORealX = fractal.ORealX; double OImY = fractal.OImY; point tmp = new point(); tmp.y = pixel / fractal.Width; tmp.x = pixel % fractal.Width; RealX = 1.5 * (tmp.x - fractal.Width / 2) / (fractal.Width * 0.5); ImY = (tmp.y - fractal.Height / 2) / (fractal.Height * 0.5); int i; for (i = 0; i < fractal.MaxIterations; i++) { ORealX = RealX; OImY = ImY; RealX = ORealX * ORealX - OImY * OImY + fractal.Cx; ImY = 2 * ORealX * OImY + fractal.Cy; if ((RealX * RealX + ImY * ImY) > 4) { break; } } tmp.color = Color.FromArgb(255, (i * 9) % 255, 0, (i * 9) % 255); return(tmp); } }
public Bitmap Draw(IFractalBase FractalParam) { double _dx, _dy; var fractal = FractalParam as MandelbrotFractal; Bitmap pic = new Bitmap(fractal.Width, fractal.Height); _dx = (fractal.Xmax - fractal.Xmin) / fractal.Width; _dy = (fractal.Ymax - fractal.Ymin) / fractal.Height; var points = Enumerable.Range(0, fractal.Width * fractal.Height).AsParallel().Select(Calculations); foreach (Point i in points) { pic.SetPixel(i.x, i.y, i.color); } return(pic); Point Calculations(int pixel) { double tempx; double ORealX = 0; double RealX = 0; double OImY = 0; double ImY = 0; var p = new Point(); p.y = pixel / fractal.Width; p.x = pixel % fractal.Width; OImY = p.y * _dy + fractal.Ymin; ORealX = p.x * _dx + fractal.Xmin; int l; for (l = 0; l < fractal.MaxIterations && ((RealX * RealX) + (ImY * ImY)) < 4; l++) { tempx = (RealX * RealX) - (ImY * ImY) + ORealX; ImY = 2 * RealX * ImY + OImY; RealX = tempx; } p.color = Color.FromArgb(255, (l * 9) % 255, 0, (l * 9) % 255); return(p); } }
/// <summary> /// Установка начальных значений полям ввода. /// </summary> private void FormInitialize() { // ToDo: загружать словарь фракталов извне _fractalviewmodels.Add(0, new FractalViewModel { Fractal = new MandelbrotFractal() }); _fractalviewmodels.Add(1, new FractalViewModel { Fractal = new JuliaFractal() }); _fractalviewmodels.Add(2, new FractalViewModel { Fractal = new MandelbrotFractalModernized() }); _fractalviewmodels.Add(3, new FractalViewModel { Fractal = new TricornFractal() }); _selectedFractal = _fractalviewmodels[0].Fractal; tabControl1.SelectedIndex = 0; TextBoxRMF.Text = _fractalviewmodels[0].Fractal.R.ToString(); TextBoxRJF.Text = _fractalviewmodels[1].Fractal.R.ToString(); TextBoxRMMF.Text = _fractalviewmodels[2].Fractal.R.ToString(); TextBoxRTF.Text = _fractalviewmodels[3].Fractal.R.ToString(); TextBoxBMF.Text = _fractalviewmodels[0].Fractal.B.ToString(); TextBoxBJF.Text = _fractalviewmodels[1].Fractal.B.ToString(); TextBoxBMMF.Text = _fractalviewmodels[2].Fractal.B.ToString(); TextBoxBTF.Text = _fractalviewmodels[3].Fractal.B.ToString(); TextBoxGMF.Text = _fractalviewmodels[0].Fractal.G.ToString(); TextBoxGJF.Text = _fractalviewmodels[1].Fractal.G.ToString(); TextBoxGMMF.Text = _fractalviewmodels[2].Fractal.G.ToString(); TextBoxGTF.Text = _fractalviewmodels[3].Fractal.G.ToString(); TextBoxWidthMF.Text = _fractalviewmodels[0].Fractal.Width.ToString(); TextBoxWidthJF.Text = _fractalviewmodels[1].Fractal.Width.ToString(); TextBoxWidthMMF.Text = _fractalviewmodels[2].Fractal.Width.ToString(); TextBoxWidthTF.Text = _fractalviewmodels[3].Fractal.Width.ToString(); TextBoxHeightMF.Text = _fractalviewmodels[0].Fractal.Height.ToString(); TextBoxHeightJF.Text = _fractalviewmodels[1].Fractal.Height.ToString(); TextBoxHeightMMF.Text = _fractalviewmodels[2].Fractal.Height.ToString(); TextBoxHeightTF.Text = _fractalviewmodels[3].Fractal.Height.ToString(); TextBoxZoomMF.Text = _fractalviewmodels[0].Fractal.Zoom.ToString(); TextBoxZoomJF.Text = _fractalviewmodels[1].Fractal.Zoom.ToString(); TextBoxZoomMMF.Text = _fractalviewmodels[2].Fractal.Zoom.ToString(); TextBoxZoomTF.Text = _fractalviewmodels[3].Fractal.Zoom.ToString(); TextBoxIterationsMF.Text = _fractalviewmodels[0].Fractal.Iterations.ToString(); TextBoxIterationsJF.Text = _fractalviewmodels[1].Fractal.Iterations.ToString(); TextBoxIterationsMMF.Text = _fractalviewmodels[2].Fractal.Iterations.ToString(); TextBoxIterationsTF.Text = _fractalviewmodels[3].Fractal.Iterations.ToString(); TextBoxMoveXMF.Text = _fractalviewmodels[0].Fractal.MoveX.ToString(); TextBoxMoveXJF.Text = _fractalviewmodels[1].Fractal.MoveX.ToString(); TextBoxMoveXMMF.Text = _fractalviewmodels[2].Fractal.MoveX.ToString(); TextBoxMoveXTF.Text = _fractalviewmodels[3].Fractal.MoveX.ToString(); TextBoxMoveYMF.Text = _fractalviewmodels[0].Fractal.MoveY.ToString(); TextBoxMoveYJF.Text = _fractalviewmodels[1].Fractal.MoveY.ToString(); TextBoxMoveYMMF.Text = _fractalviewmodels[2].Fractal.MoveY.ToString(); TextBoxMoveYTF.Text = _fractalviewmodels[3].Fractal.MoveY.ToString(); var temp = _fractalviewmodels[1].Fractal as JuliaFractal; TextBoxC_ReJF.Text = temp.C.Real.ToString(); TextBoxC_ImJF.Text = temp.C.Imaginary.ToString(); }