Среда программирования:
Microsoft Visual Studio 2015
Статья по теме:
Программа, рисующая фрактал Висекка, написанная на C# с использованием стандартной графической библиотеки. Рекурсивный алгоритм рисует изображение с небольшой задержкой с целью получения красивого эффекта.
Для рисования требуется нажать кнопки:
Draw I-Type - отрисуется фрактал, образованный с удалением угловых
квадратов,
Draw II-Type - с удержанием угловых квадратов,
Combine - для получения наложения.
Код программы:
using System; using System.Drawing; using System.Windows.Forms; namespace ViscekFractal { public partial class Form1 : Form { public Form1() { InitializeComponent(); } Pen myRedPen = new Pen(Color.Red, 3); Pen myWhitePen = new Pen(Color.White, 3); // Функция рисует фрактал с центром в точке (x, y) фрактал 1-го типа // degree - количество итераций private void DrawFractal(int degree, int x, int y, Pen myPen) { Graphics g = this.CreateGraphics(); if (degree == 1) { // Достигли центра g.DrawRectangle(myPen, x, y, 1, 1); } else { int dist = (int)Math.Pow(3, degree - 1); // Рассчитываем центры для ветвей System.Threading.Thread.Sleep(10); // Задержка DrawFractal(degree - 1, x, y, myPen); DrawFractal(degree - 1, x - dist, y - dist, myPen); DrawFractal(degree - 1, x - dist, y + dist, myPen); DrawFractal(degree - 1, x + dist, y - dist, myPen); DrawFractal(degree - 1, x + dist, y + dist, myPen); } } // Функция рисует фрактал с центром в точке (x, y) фрактал 2-го типа private void DrawSimilarFractal(int degree, int x, int y, Pen myPen) { Graphics g = this.CreateGraphics(); if (degree == 1) { g.DrawRectangle(myPen, x, y, 1, 1); } else { int dist = (int)Math.Pow(3, degree - 1); System.Threading.Thread.Sleep(10); DrawSimilarFractal(degree - 1, x, y, myPen); DrawSimilarFractal(degree - 1, x + dist, y, myPen); DrawSimilarFractal(degree - 1, x - dist, y, myPen); DrawSimilarFractal(degree - 1, x, y - dist, myPen); DrawSimilarFractal(degree - 1, x, y + dist, myPen); } } private void button1_Click(object sender, EventArgs e) { DrawFractal(5, 150, 200, myWhitePen); } private void button2_Click(object sender, EventArgs e) { DrawSimilarFractal(5, 800, 200, myWhitePen); } private void button3_Click(object sender, EventArgs e) { DrawFractal(5, 475, 200, myWhitePen); DrawSimilarFractal(5, 475, 200, myRedPen); } } }
Прикрепленный файл | Размер |
---|---|
Ametov_ViscekFractal.zip | 53.64 кб |