Нарисуйте ковер Sierpinski в C#
В этом примере показано, как нарисовать ковер Sierpinski, тип фрактала, известный как прокладка. Должности и Разверните треугольник Серпинского в 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, то метод рисует один из самых маленьких прямоугольников. В этом случае метод просто рисует свой прямоугольник и останавливается.
