Нарисуйте ковер Sierpinski в C#

В этом примере показано, как нарисовать ковер Sierpinski, тип фрактала, известный как прокладка. Должности Нарисуйте прокладку Серпинского в C# и Разверните треугольник Серпинского в C# показывает два способа нарисовать различную прокладку.

Ключом к коверу Серпинского является следующий DrawRectangle метод.

// Нарисуем ковер в прямоугольнике.
private void DrawRectangle(Graphics gr, int level, RectangleF rect)
{
  // Посмотрим, остановимся ли мы.
  if (level == 0)
  {
    // Заполните прямоугольник.
    gr.FillRectangle(Brushes.Blue, rect);
  }
  else
  {
    // Разделим прямоугольник на 9 частей.
    float wid = rect.Width / 3f;
    float x0 = rect.Left;
    float x1 = x0 + wid;
    float x2 = x0 + wid * 2f;

    float hgt = rect.Height / 3f;
    float y0 = rect.Top;
    float y1 = y0 + hgt;
    float y2 = y0 + hgt * 2f;

    // Рекурсивно рисуем меньшие ковры.
    DrawRectangle(gr, level - 1, new RectangleF(x0, y0, wid, hgt));
    DrawRectangle(gr, level - 1, new RectangleF(x1, y0, wid, hgt));
    DrawRectangle(gr, level - 1, new RectangleF(x2, y0, wid, hgt));
    DrawRectangle(gr, level - 1, new RectangleF(x0, y1, wid, hgt));
    DrawRectangle(gr, level - 1, new RectangleF(x2, y1, wid, hgt));
    DrawRectangle(gr, level - 1, new RectangleF(x0, y2, wid, hgt));
    DrawRectangle(gr, level - 1, new RectangleF(x1, y2, wid, hgt));
    DrawRectangle(gr, level - 1, new RectangleF(x2, y2, wid, hgt));
  }
}

Этот метод заполняет прямоугольник. Он начинается с проверки параметра level. Если level равно 0, то метод рисует один из самых маленьких прямоугольников. В этом случае метод просто рисует свой прямоугольник и останавливается.

Источник: http://csharphelper.com/blog/2015/01/draw-sierpinski-carpet-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Adblock
detector