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