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