[C# Helper]
Index Books FAQ Contact About Rod
[Beginning Database Design Solutions, Second Edition]

[Beginning Software Engineering, Second Edition]

[Essential Algorithms, Second Edition]

[The Modern C# Challenge]

[WPF 3d, Three-Dimensional Graphics with WPF and C#]

[The C# Helper Top 100]

[Interview Puzzles Dissected]

[C# 24-Hour Trainer]

[C# 5.0 Programmer's Reference]

[MCSD Certification Toolkit (Exam 70-483): Programming in C#]

Title: Draw a Sierpinski triangle in C#

[Draw a Sierpinski triangle in C#]

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.

Download the example to experiment with it and to see additional details.

© 2009-2023 Rocky Mountain Computer Consulting, Inc. All rights reserved.