Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.Drawing;
- using System;
- using static System.Math;
- namespace Fractals
- {
- public class PointD
- {
- public double X { get; set; }
- public double Y { get; set; }
- public PointD(double x, double y)
- {
- X = x;
- Y = y;
- }
- }
- internal static class DragonFractalTask
- {
- public static void DrawDragonFractal(Pixels pixels, int iterationsCount, int seed)
- {
- var transforms = new Action<PointD>[2] { Transform1, Transform2 };
- var random = new Random(seed);
- var currentPoint = new PointD(1d, 0d);
- for (var i = 1; i <= iterationsCount; i++)
- {
- transforms[random.Next(0,2)]?.Invoke(currentPoint);
- pixels.SetPixel(currentPoint.X, currentPoint.Y);
- }
- }
- private static void Transform1(PointD point)
- {
- var angle45 = PI / 4;
- var xTemp = (point.X * Cos(angle45) - point.Y * Sin(angle45)) / Sqrt(2);
- var yTemp = (point.X * Sin(angle45) + point.Y * Cos(angle45)) / Sqrt(2);
- point.X = xTemp;
- point.Y = yTemp;
- }
- private static void Transform2(PointD point)
- {
- var angle135 = 3*(PI / 4);
- var xTemp = ((point.X * Cos(angle135) - point.Y * Sin(angle135)) / Sqrt(2)) + 1;
- var yTemp = (point.X * Sin(angle135) + point.Y * Cos(angle135)) / Sqrt(2);
- point.X = xTemp;
- point.Y = yTemp;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement