Advertisement
punidota

Untitled

Oct 1st, 2015
405
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.80 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 Emulator : Form
  14.     {
  15.         static Pen pen1;
  16.         static Graphics g;
  17.         static Pen pen2;
  18.         public Emulator()
  19.         {
  20.             InitializeComponent();
  21.         }
  22.         private void Draw(object sender, EventArgs e)
  23.         {
  24.             g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
  25.             //Объявляем объект "g" класса Graphics
  26.             g = CreateGraphics();
  27.             g.Clear(Color.Black);//Зарисовка экрана черным фоном
  28.             //Определим коорднаты исходного треугольника
  29.             var point1 = new PointF(200, 200);
  30.             var point2 = new PointF(500, 200);
  31.             var point3 = new PointF(350, 400);
  32.             for (int d = 15; d <= 175; ++d)
  33.             {
  34.              
  35.              Random rnd = new Random();
  36.              //Выбираем цвета зарисовки
  37.              for (int m = 1; m < 5; m++) {
  38.                 Pen pen1a = new Pen(Color.FromArgb(rnd.Next(255), rnd.Next(255), rnd.Next(255), rnd.Next(255)), m);
  39.                 float x1, x2, x3, y1, y2, y3;
  40.                 x1 = 450; x1 -= d;
  41.                 y1 = 400; y1 -= d;
  42.                 x2 = 50; x2 += d;
  43.                 y2 = 400; y2 -= d;
  44.                 x3 = 250;
  45.                 y3 = 50; y3 += d;
  46.                 var point1a = new PointF(x1, y1);
  47.                 var point2a = new PointF(x2, y2);
  48.                 var point3a = new PointF(x3, y3);
  49.                 g.DrawLine(pen1a, point1a, point2a);
  50.                 g.DrawLine(pen1a, point2a, point3a);
  51.                 g.DrawLine(pen1a, point3a, point1a);
  52.            
  53.               for (int n = 0; n < 5;n++ )
  54.               {
  55.                 Fractal(point1a, point2a, point3a, n);
  56.                 Fractal(point2a, point3a, point1a, n);
  57.                 Fractal(point3a, point1a, point2a, n);
  58.               }
  59.             }}
  60. }
  61.         //рекурсивная функция рисования кривой Коха
  62.         static int Fractal(PointF p1, PointF p2, PointF p3, int iter)
  63.         {
  64.             //n -количество итераций
  65.             if (iter > 0)  //условие выхода из рекурсии
  66.             {
  67.                 g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
  68.                 Random rnd = new Random();
  69.                 Pen pen2a = new Pen(Color.FromArgb(rnd.Next(255), rnd.Next(255), rnd.Next(255), rnd.Next(255)), 1);
  70.                 //средняя треть отрезка
  71.                 var p4 = new PointF((p2.X + 2 * p1.X) / 3, (p2.Y + 2 * p1.Y) / 3) ;
  72.                 var p5 = new PointF((2 * p2.X + p1.X) / 3, (p1.Y + 2 * p2.Y) / 3) ;
  73.                 //координаты вершины угла
  74.                 var ps = new PointF((p2.X + p1.X) / 2, (p2.Y + p1.Y) / 2) ;
  75.                 var pn = new PointF((4 * ps.X - p3.X) / 3, (4 * ps.Y - p3.Y) / 3) ;
  76.                 //рисуем его
  77.                 g.DrawLine(pen2a, p4, pn);
  78.                 g.DrawLine(pen2a, p5, pn);
  79.                 g.DrawLine(pen2a, p4, p5);
  80.                 //рекурсивно вызываем функцию нужное число раз
  81.                 Fractal(p4, pn, p5, iter - 1);
  82.                 Fractal(pn, p5, p4, iter - 1);
  83.                 Fractal(p1, p4, new PointF((2 * p1.X + p3.X) / 3, (2 * p1.Y + p3.Y) / 3), iter - 1);
  84.                 Fractal(p5, p2, new PointF((2 * p2.X + p3.X) / 3, (2 * p2.Y + p3.Y) / 3), iter - 1);
  85.             }
  86.             return iter;
  87.         }
  88.  
  89.     }
  90. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement