Среда программирования:
Visual Studio 2015
Статья по теме:
Код программы:
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 Burning_Ship { public partial class Form1 : Form { public Graphics graph; //Графика public Bitmap map; //Битмап public Brush br; //Кисть //После какого количества итераций функция должна прекращать работу public int iter = 30; public int max = 16; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { map = new Bitmap(pictureBox1.Width, pictureBox1.Height);//Подключаем Битмап graph = Graphics.FromImage(map); //Подключаем графику graph.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;//Включаем сглаживание graph.Clear(Color.Black); //Черный фон //Координаты центра int yc = pictureBox1.Height / 2; int xc = pictureBox1.Width / 2; //Комплексные числа PointF z = new PointF(); PointF t = new PointF(); PointF c = new PointF(); //переменная для подсчета итераций int n; for(int y = -yc; y <= yc; y++) { for(int x = -xc; x <= xc; x++) { n = 0; //Установим начальное значение константы С //которая определяет форму фрактала c.X = x * 0.01f - 0.2f; c.Y = y * 0.01f - 0.3f; //Начальное значение действительной и мнимой частей числа Z z.X = 0f; z.Y = 0f; //вычисляем реальную и мнимую части числа z while (((Math.Pow(z.X, 2) + Math.Pow(z.Y, 2)) < max) && (n < iter)) { //Запоминаем предыдущее значение t = z; //Вычисление в текущем значении n < iterations z.X = (float)(Math.Pow(t.X, 2) - Math.Pow(t.Y, 2) + c.X); z.Y = 2 * Math.Abs(t.X * t.Y) + c.Y; //увеличиваем количество итераций n++; } if ( n < iter) { //выбираем цвет по числу итераций //можно выбрать одно из значений переменной clr //для изoбражения фрактала в разной цветовой палитре int r = (50 * n) % 256; Color clr = new Color(); clr = Color.FromArgb(r, 0, 0); br = new SolidBrush(clr); //Отрисовка пикселя соответствующим цветом graph.FillRectangle(br, xc + x, yc + y, 1, 1); } } } //Переносим изображение из битмапа на picturebox pictureBox1.BackgroundImage = map; } } }
Прикрепленный файл | Размер |
---|---|
Burning Ship.zip | 52.61 кб |