Advertisement
Unchpokable

ULearn "Dragon Curve" practic

Dec 18th, 2020
808
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.28 KB | None | 0 0
  1. using System.Drawing;
  2. using System;
  3. using static System.Math;
  4.  
  5. namespace Fractals
  6. {  
  7.     public class PointD
  8.     {
  9.         public double X { get; set; }
  10.         public double Y { get; set; }
  11.        
  12.         public PointD(double x, double y)
  13.         {
  14.             X = x;
  15.             Y = y;
  16.         }
  17.     }
  18.    
  19.     internal static class DragonFractalTask
  20.     {
  21.         public static void DrawDragonFractal(Pixels pixels, int iterationsCount, int seed)
  22.         {
  23.             var transforms = new Action<PointD>[2] { Transform1, Transform2 };
  24.             var random = new Random(seed);
  25.             var currentPoint = new PointD(1d, 0d);
  26.            
  27.             for (var i = 1; i <= iterationsCount; i++)
  28.             {
  29.                 transforms[random.Next(0,2)]?.Invoke(currentPoint);
  30.                 pixels.SetPixel(currentPoint.X, currentPoint.Y);
  31.             }
  32.         }
  33.  
  34.         private static void Transform1(PointD point)
  35.         {
  36.             var angle45 = PI / 4;
  37.             var xTemp = (point.X * Cos(angle45) - point.Y * Sin(angle45)) / Sqrt(2);
  38.             var yTemp = (point.X * Sin(angle45) + point.Y * Cos(angle45)) / Sqrt(2);
  39.             point.X = xTemp;
  40.             point.Y = yTemp;
  41.         }
  42.  
  43.         private static void Transform2(PointD point)
  44.         {
  45.             var angle135 = 3*(PI / 4);
  46.             var xTemp = ((point.X * Cos(angle135) - point.Y * Sin(angle135)) / Sqrt(2)) + 1;
  47.             var yTemp = (point.X * Sin(angle135) + point.Y * Cos(angle135)) / Sqrt(2);
  48.             point.X = xTemp;
  49.             point.Y = yTemp;
  50.         }
  51.     }
  52. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement