Среда программирования:
Visual Studio 2019
Статья по теме:
При запуске программы рисуется на нашей форме Фрактальное Дерево
Алгоритм:
1) Создаём Функцию, которая отрисовывает фрактальное дерево с определёнными координатами, длиной и углом!
2) Рисуем линию от координат x,y до координат x1, y1, создаём карандаш черного цвета и делаем наши ветви пожирнее, путём деления длины на какое нибудь произвольное значение!
3) Вызываем рекурсивную функцию, чтобы отрисовать наши ветви по назначенным координатам, а также создаём событие Paint, в котором и будет происходить отрисовка нашего Фрактального Дерева
Код программы:
Program Sasha; 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 FractalTree1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } public void DrawF(int x, int y, int len, double angle, PaintEventArgs e) //Функция, которая отрисовывает наши ветки, где x и y - координаты, переменная len - длина, а переменная angle - угол поворота { Graphics g = e.Graphics; double x1, y1; //Новые координаты, которые мы расчитаем исходя из длины и угла x1 = x + len * Math.Sin(angle * Math.PI * 2 / 360.0); // к координате х прибавляем длину умноженную на уравнение окружности и присваиваем это всё в x1 y1 = y + len * Math.Cos(angle * Math.PI * 2 / 360.0); // к координате y прибавляем длину умноженную на уравнение окружности и присваиваем это всё в y1 g.DrawLine(new Pen(Color.Black, len/25), x, panel1.Height - y, (int)x1, panel1.Height - (int)y1); //Рисуем линию от координат x,y до координат x1,y1; Создаём карандаш Pen(Color.Black, (len/25) - длину делим на 25, чтобы сделать ветки пожирнее), x1 и y1 - преобразуем в целые числа, чтобы осуществлять отрисовку и от panel1.Height вычитаем координаты y и y1, чтобы рисунок отрисовывался с нижней части нашей панели if (len > 20) // Функция DrawF будет вызываться бесконечно, когда её длина станет больше 20 пикселей, тогда функция DrawF - прекратится { DrawF((int)x1, (int)y1, (int)(len / 1.5), angle + 35, e); //Рисуем следующую ветку в координатах x1, y1, длину len делим на 1.5 - чтобы ветки были красивее, а к углу angle - прибавляем 35 градусов, для того чтобы нарисовать правую сторону нашего фрактального древа DrawF((int)x1, (int)y1, (int)(len / 1.5), angle - 35, e); //Рисуем следующую ветку в координатах x1, y1, длину len делим на 1.5 - чтобы ветки были красивее, а от угла angle - вычитаем 35 градусов, для того чтобы нарисовать левую сторону нашего фрактального древа DrawF((int)x1, (int)y1, (int)(len / 1.5), angle + 15, e); //Рисуем дополнительные ветки с другими углами, при изменении угла или длины ветви будут изменяться DrawF((int)x1, (int)y1, (int)(len / 1.5), angle - 15, e); //Рисуем дополнительные ветки с другими углами, при изменинии угла или длины ветви будут изменяться } } private void panel1_Paint(object sender, PaintEventArgs e) //Событие Paint { DrawF(panel1.Width/2,0,200,0,e); // При помощи функции рисуем в нашей Панеле линию с верха Панели и задаем длину - 300, угол 0, и Paint аргументы передаём } } } end.
Прикрепленный файл | Размер |
---|---|
Moskvitina FractalTree1.zip | 37.27 кб |