Advertisement
punidota

Untitled

Oct 1st, 2015
403
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.71 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows.Forms;
  10.  
  11. namespace koh
  12. {
  13.     public partial class koh1 : Form
  14.     {
  15.         static Graphics g;
  16.         static Pen pen1;
  17.         static Pen pen2;
  18.  
  19.         public koh1()
  20.         {
  21.             InitializeComponent();
  22.         }
  23.         private void Draw(object sender, EventArgs e)
  24.         {
  25.             g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
  26.             //Выбираем цвета зарисовки c форм
  27.             int col1 = Convert.ToInt32(colbox1.Text);
  28.             int col2 = Convert.ToInt32(colbox2.Text);
  29.             int col3 = Convert.ToInt32(colbox3.Text);
  30.             pen1 = new Pen(Color.FromArgb(col1,col2,col3), 1);
  31.             pen2 = new Pen(Color.Blue, 1);
  32.             //Объявляем объект "g" класса Graphics
  33.             g = CreateGraphics();
  34.             g.Clear(Color.Black);//Зарисовка экрана черным фоном
  35.             //Определим коорднаты исходного треугольника
  36.             PointF point1 = new PointF(450, 400);
  37.             PointF point2 = new PointF(50, 400);
  38.             PointF point3  = new PointF(250, 50);
  39.             //Зарисуем треугольник
  40.             g.DrawLine(pen1, point1, point2);
  41.             g.DrawLine(pen1, point2, point3);
  42.             g.DrawLine(pen2, point3, point1);
  43.             //Вызываем функцию Fractal для того, чтобы
  44.             //нарисовать три кривых Коха на сторонах треугольника
  45.             int n = Convert.ToInt32(Deep.Text);
  46.             Fractal(point1, point2, point3, n);
  47.             Fractal(point2, point3, point1, n);
  48.             Fractal(point3, point1, point2, n);
  49.            }
  50.         //рекурсивная функция рисования кривой Коха
  51.         static int Fractal(PointF p1, PointF p2, PointF p3, int iter)
  52.         {
  53.             //n -количество итераций
  54.             if (iter > 0)  //условие выхода из рекурсии
  55.             {
  56.                 gr.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
  57.                 //средняя треть отрезка
  58.                 var p4 = new PointF((p2.X + 2 * p1.X) / 3, (p2.Y + 2 * p1.Y) / 3);
  59.                 var p5 = new PointF((2 * p2.X + p1.X) / 3, (p1.Y + 2 * p2.Y) / 3);
  60.                 //координаты вершины угла
  61.                 var ps = new PointF((p2.X + p1.X) / 2, (p2.Y + p1.Y) / 2);
  62.                 var pn = new PointF((4 * ps.X - p3.X) / 3, (4 * ps.Y - p3.Y) / 3);
  63.                 //рисуем его
  64.                 g.DrawLine(pen1, p4, pn);
  65.                 g.DrawLine(pen1, p5, pn);
  66.                 g.DrawLine(pen2, p4, p5);
  67.                 //рекурсивно вызываем функцию нужное число раз
  68.                 Fractal(p4, pn, p5, iter - 1);
  69.                 Fractal(pn, p5, p4, iter - 1);
  70.                 Fractal(p1, p4, new PointF((2 * p1.X + p3.X) / 3, (2 * p1.Y + p3.Y) / 3), iter - 1);
  71.                 Fractal(p5, p2, new PointF((2 * p2.X + p3.X) / 3, (2 * p2.Y + p3.Y) / 3), iter - 1);
  72.  
  73.             }
  74.             return iter;
  75.         }
  76.         private void clear_Click(object sender, EventArgs e)
  77.         {
  78.             Graphics g = CreateGraphics();
  79.             //Своеобразный метод очистки закрашиванием плоскости.
  80.             g.Clear(Color.Black);
  81.             Deep.Text = "0";
  82.         }
  83.     }
  84. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement