Среда программирования:
Microsoft Visual Studio 2015
Статья по теме:
Программа рисующая фрактал-биоморф "Радиолярия", написанная на C# с использованием стандартной графической библиотеки
Код программы:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace Biomorph { public partial class Form1 : Form { public Graphics g; //Графика public Bitmap map; //Битмап SolidBrush br; //Кисть public const int it = 50, max = 100; //Коэффициенты для выхода из основного цикла public int n; //Количество итераций public int xc, yc; //Координаты центра public PointF z, t, c; //Комплексные числа public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { //Координаты центра xc = pictureBox1.Width / 2; yc = pictureBox1.Height / 2; //Подключение графики map = new Bitmap(pictureBox1.Width, pictureBox1.Height); g = Graphics.FromImage(map); g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; //Определяем коэффициент C c.X = 0.5f; c.Y = 0f; //Основной цикл по всем точкам комплексной плоскости for (float x = -2; x <= 2; x += 0.002f) { for (float y = -2; y <= 2; y += 0.002f) { z.X = x; z.Y = y; n = 0; //Итерируем функцию f(z) = z^3 + c while ((Math.Abs(z.X) < max) && (Math.Abs(z.Y) < max) && (n < it)) { t.X = z.X; t.Y = z.Y; n++; z.X = t.X * t.X * t.X - 3 * t.X * t.Y * t.Y + c.X; z.Y = 3 * t.X * t.X * t.Y - t.Y * t.Y * t.Y + c.Y; } //Определяем зоны черного и оранжевого if ((Math.Abs(z.X) >= 300) || (Math.Abs(z.Y) >= 10000)) { br = new SolidBrush(Color.Black); int xt = ChangeCoordinates(x, 0); int yt = ChangeCoordinates(y, 1); g.FillRectangle(br, xt, yt, 1, 1); pictureBox1.BackgroundImage = map; } else { br = new SolidBrush(Color.Orange); int xt = ChangeCoordinates(x, 0); int yt = ChangeCoordinates(y, 1); g.FillRectangle(br, xt, yt, 1, 1); pictureBox1.BackgroundImage = map; } } } } //Перевод координат из реальных в машинные public int ChangeCoordinates(double a, int isY) { if (isY == 1) return (int)(yc - a * 150); return (int)(xc + a * 150); } } }
Прикрепленный файл | Размер |
---|---|
RadioLaria.zip | 52.02 кб |