Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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 koh
- {
- public partial class koh1 : Form
- {
- static Graphics g;
- static Pen pen1;
- static Pen pen2;
- public koh1()
- {
- InitializeComponent();
- }
- private void Draw(object sender, EventArgs e)
- {
- g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
- //Выбираем цвета зарисовки c форм
- int col1 = Convert.ToInt32(colbox1.Text);
- int col2 = Convert.ToInt32(colbox2.Text);
- int col3 = Convert.ToInt32(colbox3.Text);
- pen1 = new Pen(Color.FromArgb(col1,col2,col3), 1);
- pen2 = new Pen(Color.Blue, 1);
- //Объявляем объект "g" класса Graphics
- g = CreateGraphics();
- g.Clear(Color.Black);//Зарисовка экрана черным фоном
- //Определим коорднаты исходного треугольника
- PointF point1 = new PointF(450, 400);
- PointF point2 = new PointF(50, 400);
- PointF point3 = new PointF(250, 50);
- //Зарисуем треугольник
- g.DrawLine(pen1, point1, point2);
- g.DrawLine(pen1, point2, point3);
- g.DrawLine(pen2, point3, point1);
- //Вызываем функцию Fractal для того, чтобы
- //нарисовать три кривых Коха на сторонах треугольника
- int n = Convert.ToInt32(Deep.Text);
- Fractal(point1, point2, point3, n);
- Fractal(point2, point3, point1, n);
- Fractal(point3, point1, point2, n);
- }
- //рекурсивная функция рисования кривой Коха
- static int Fractal(PointF p1, PointF p2, PointF p3, int iter)
- {
- //n -количество итераций
- if (iter > 0) //условие выхода из рекурсии
- {
- gr.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
- //средняя треть отрезка
- var p4 = new PointF((p2.X + 2 * p1.X) / 3, (p2.Y + 2 * p1.Y) / 3);
- var p5 = new PointF((2 * p2.X + p1.X) / 3, (p1.Y + 2 * p2.Y) / 3);
- //координаты вершины угла
- var ps = new PointF((p2.X + p1.X) / 2, (p2.Y + p1.Y) / 2);
- var pn = new PointF((4 * ps.X - p3.X) / 3, (4 * ps.Y - p3.Y) / 3);
- //рисуем его
- g.DrawLine(pen1, p4, pn);
- g.DrawLine(pen1, p5, pn);
- g.DrawLine(pen2, p4, p5);
- //рекурсивно вызываем функцию нужное число раз
- Fractal(p4, pn, p5, iter - 1);
- Fractal(pn, p5, p4, iter - 1);
- Fractal(p1, p4, new PointF((2 * p1.X + p3.X) / 3, (2 * p1.Y + p3.Y) / 3), iter - 1);
- Fractal(p5, p2, new PointF((2 * p2.X + p3.X) / 3, (2 * p2.Y + p3.Y) / 3), iter - 1);
- }
- return iter;
- }
- private void clear_Click(object sender, EventArgs e)
- {
- Graphics g = CreateGraphics();
- //Своеобразный метод очистки закрашиванием плоскости.
- g.Clear(Color.Black);
- Deep.Text = "0";
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement