Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.Drawing;
- using System;
- namespace Fractals
- {
- internal static class DragonFractalTask
- {
- public static void DrawDragonFractal(Pixels pixels, int iterationsCount, int seed)
- {
- /*
- Начните с точки (1, 0)
- Создайте генератор рандомных чисел с сидом seed
- На каждой итерации:
- 1. Выберите случайно одно из следующих преобразований и примените его к текущей точке:
- Преобразование 1. (поворот на 45° и сжатие в sqrt(2) раз):
- x' = (x · cos(45°) - y · sin(45°)) / sqrt(2)
- y' = (x · sin(45°) + y · cos(45°)) / sqrt(2)
- Преобразование 2. (поворот на 135°, сжатие в sqrt(2) раз, сдвиг по X на единицу):
- x' = (x · cos(135°) - y · sin(135°)) / sqrt(2) + 1
- y' = (x · sin(135°) + y · cos(135°)) / sqrt(2)
- 2. Нарисуйте текущую точку методом pixels.SetPixel(x, y)
- */
- var random = new Random(seed);
- for (var i = 0; i < iterationsCount; i++)
- {
- var nextNumber = random.Next(10);
- }
- }
- public static double GetFirstXTransformation(double x, double y)
- {
- return (x * Math.Cos(Math.PI / 4) - y * Math.Sin(Math.PI / 4)) / Math.Sqrt(2);
- }
- public static double GetFirstYTransformation(double x, double y)
- {
- return (x * Math.Sin(Math.PI / 4) + y * Math.Cos(Math.PI / 4)) / Math.Sqrt(2);
- }
- public static double GetSecondXTransformation(double x, double y)
- {
- return (x * Math.Sin(Math.PI * 0.75) + y * Math.Cos(Math.PI * 0.75) / Math.Sqrt(2) + 1;
- }
- public static double GetSecondYTransformation(double x, double y)
- {
- return (x * Math.Sin(Math.PI * 0.75) + y * Math.Cos(Math.PI * 0.75)) / Math.Sqrt(2);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement