Среда программирования:
Microsoft Visual Studio 2015
Статья по теме:
Функция drawFractal получает в качестве параметров координаты центра круга, затем радиус, затем индекс, определяющий положение его родителя(для самого первого полагаем, что родитель был "снизу"), а также количество итераций. Рисуем круг со входными данными, далее в случае, если итераций не осталось, заканчиваем отрисовку, иначе - находим координаты всех центров потенциальных кругов-потомком, а затем для каждого, кроме того, чье место занято родителем, вызываем эту же самую функцию с соответствующими параметрами.
Код программы:
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 WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); g = pictureBox1.CreateGraphics(); S = new SolidBrush(Color.Black); } private Graphics g; SolidBrush S; private void button1_Click(object sender, EventArgs e) { int x, y, r; r = pictureBox1.Height / 6; x = pictureBox1.Width / 2; y = 3 * pictureBox1.Height / 5; int iter = 5; drawFractal(x, y, r, 1, iter); } int drawFractal(int x0, int y0, int r, int dir, int iter) { g.FillEllipse(S, x0 - r, y0 - r, 2 * r, 2 * r); if (iter == 0) return 0; int[] x = new int[4]; int[] y = new int[4]; int d = 3 * r / 2; x[0] = x0 - d; y[0] = y0; x[1] = x0; y[1] = y0 - d; x[2] = x0 + d; y[2] = y0; x[3] = x0; y[3] = y0 + d; for (int i = 0; i < 4; i++) { //draw every child except parent direction if (i - dir == 2 || i - dir == -2) continue; drawFractal(x[i], y[i], r / 2, i, iter - 1); } return 0; } } }
Прикрепленный файл | Размер |
---|---|
hairudinov_fractal_kvaziclever.zip | 55.07 кб |