This example shows how to draw a Sierpinski triangle. The post Draw a Sierpinski gasket in C# shows a rather strange iterative way to draw the shape shown in the picture. This example shows another way that is more obviously predictable.

The key is the following `DrawTriangle` method.

`// Draw a triangle between the points.
private void DrawTriangle(Graphics gr, int level,
PointF top_point, PointF left_point, PointF right_point)
{
// See if we should stop.
if (level == 0)
{
// Fill the triangle.
PointF[] points =
{
top_point, right_point, left_point
};
gr.FillPolygon(Brushes.Red, points);
}
else
{
// Find the edge midpoints.
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);
// Recursively draw smaller triangles.
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);
}
}`

This method draws a triangle, calling itself recursively to draw smaller triangles if necessary.

The method starts by checking the `level` parameter. If `level` is 0, then the method is drawing one of the smallest triangles. In that case, the method simply draws its triangle and stops.

If `level` is greater than 0, the method finds the midpoints of the edges of its triangle. It then calls itself recursively to fill the three triangles in its corners.

## About RodStephens

Rod Stephens is a software consultant and author who has written more than 30 books and 250 magazine articles covering C#, Visual Basic, Visual Basic for Applications, Delphi, and Java.