Фрактал Дракона или по-другому Драгон Хартера-Хейтуэя в реализации на 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 приравнивать напрямую, то фрактал будет строиться неверно.