Фрактал Дракон C#

Фрактал Дракона или по-другому Драгон Хартера-Хейтуэя в реализации на C# достаточно прост, но несмотря на свою простоту учит новичков достаточно важным вещам в реализации некоторых возможностей C#.

Начиная с точки (1,0) реализуется следующий алгоритм

 public static void DrawDragonFractal(Pixels pixels, int iterationsCount, int seed)
        {
double x = 1.0, y = 0.0;            
            var random = new Random(seed);
            double angle45 = Math.PI*45/180;
            double angle135 = Math.PI*135/180;
            for (int i = 0; i < iterationsCount; i++)
            {                
                pixels.SetPixel(x, y);
                var randomNumber = random.Next(10);
                if (randomNumber % 2 == 0)
                {                    
                    var x1 = (x * Math.Cos(angle45) - y * Math.Sin(angle45)) / Math.Sqrt(2);
                    var y1 = (x * Math.Sin(angle45) + y * Math.Cos(angle45)) / Math.Sqrt(2);
                    x = x1;
                    y = y1;
                }
                else
                {
                    var x1 = (x * Math.Cos(angle135) - y * Math.Sin(angle135)) / Math.Sqrt(2) + 1;
                    var y1 = (x * Math.Sin(angle135) + y * Math.Cos(angle135)) / Math.Sqrt(2);
                    x = x1;
                    y = y1;
                }                                
            }

Важным (для новичков) здесь является использование Random, тут важно, что объявление Random осуществляется до начала цикла, а внутри цикла экземпляр класса Random выбирает из списка случайное число методом Next, в данном случае это число от 0 до 9.
Во-вторых важно понимать, что видимость некоторых переменных является не очевидным, поэтому внутри каждого if x1, y1 вычисляются отдельно и затем уже приравниваются x, y. Если x, y приравнивать напрямую, то фрактал будет строиться неверно.

Leave a comment

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.