Нарисуйте треугольник Серпинского в C#

В этом примере показано, как нарисовать треугольник Серпинского. Сообщение Нарисуйте прокладку Sierpinski на C# показывает довольно странный итеративный способ рисования фигуры, показанной на рисунке. Этот пример показывает другой путь, который более явно предсказуем.

Ключ следующий метод DrawTriangle.

// Нарисуем треугольник между точками.
private void DrawTriangle(Graphics gr, int level,
    PointF top_point, PointF left_point, PointF right_point)
{
    // Посмотрим, остановимся ли мы.
    if (level == 0)
    {
        // Заполните треугольник.
        PointF[] points =
        {
            top_point, right_point, left_point
        };
        gr.FillPolygon(Brushes.Red, points);
    }
    else
    {
        // Найти граничные точки.
        PointF left_mid = new PointF(
            (top_point.X + left_point.X) / 2f,
            (top_point.Y + left_point.Y) / 2f);
        PointF right_mid = new PointF(
            (top_point.X + right_point.X) / 2f,
            (top_point.Y + right_point.Y) / 2f);
        PointF bottom_mid = new PointF(
            (left_point.X + right_point.X) / 2f,
            (left_point.Y + right_point.Y) / 2f);

        // Рекурсивно рисуем меньшие треугольники.
        DrawTriangle(gr, level - 1,
            top_point, left_mid, right_mid);
        DrawTriangle(gr, level - 1,
            left_mid, left_point, bottom_mid);
        DrawTriangle(gr, level - 1,
            right_mid, bottom_mid, right_point);
    }
}

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

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

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

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