Skip to content
Related Articles
Sierpinski Triangle using Graphics
• Last Updated : 23 Oct, 2019

Sierpinski triangle is a fractal and attractive fixed set with the overall shape of an equilateral triangle. It subdivides recursively into smaller triangles. Approach:

• In the given segment of codes, a triangle is made and then draws out three other adjacent small triangles till the terminating condition which checks out whether the height of the triangle is less than 5 pixels returns true.
• We only need to verify whether a given triangle is smaller than 5 pixels since beyond that the triangles would start converging at fixed points.
• A counter colorVal is defined for in response to the aesthetic need of the triangle and in all, it cycles through all the available colours by iterating every triangle set.
• Using this methodology we can also further implement a fractal zoom and hypothetically provide an infinite zoom later.

Below is the implementation of the above approach:

 `// C++ code to implement``// Sierpinski Triangle using Graphics`` ` `#include ``#include ``#include `` ` `#define Y 900``#define X 1600`` ` `// Defining a function to draw a triangle``// with thickness 'delta'``void` `triangle(``float` `x, ``float` `y,``              ``float` `h, ``int` `colorVal)``{``    ``setcolor(colorVal % 15 + 1);`` ` `    ``for` `(``float` `delta = 0; delta > -5; delta -= 1) {``        ``line(x - (h + delta) / ``sqrt``(3),``             ``y - (h + delta) / 3,``             ``x + (h + delta) / ``sqrt``(3),``             ``y - (h + delta) / 3);``        ``line(x - (h + delta) / ``sqrt``(3),``             ``y - (h + delta) / 3,``             ``x,``             ``y + 2 * (h + delta) / 3);``        ``line(x,``             ``y + 2 * (h + delta) / 3,``             ``x + (h + delta) / ``sqrt``(3),``             ``y - (h + delta) / 3);``    ``}``}`` ` `// Defining a function to draw``// an inverted triangle``// with thickness 'delta'``void` `trianglev2(``float` `x, ``float` `y,``                ``float` `h, ``int` `colorVal)``{``    ``setcolor(colorVal % 15 + 1);`` ` `    ``for` `(``float` `delta = 0; delta > -1 + 5; delta -= 1) {`` ` `        ``line(x - (h + delta) / ``sqrt``(3),``             ``y + (h + delta) / 3,``             ``x + (h + delta) / ``sqrt``(3),``             ``y + (h + delta) / 3);``        ``line(x - (h + delta) / ``sqrt``(3),``             ``y + (h + delta) / 3,``             ``x,``             ``y - 2 * (h + delta) / 3);``        ``line(x,``             ``y - 2 * (h + delta) / 3,``             ``x + (h + delta) / ``sqrt``(3),``             ``y + (h + delta) / 3);``    ``}``}`` ` `// A recursive function to draw out``// three adjacent smaller triangles``// while the height is greater than 5 pixels.``int` `drawTriangles(``float` `x = X / 2,``                  ``float` `y = 2 * Y / 3,``                  ``float` `h = Y / 2,``                  ``int` `colorVal = 0)``{`` ` `    ``if` `(h < 5) {``        ``return` `0;``    ``}`` ` `    ``if` `(x > 0 && y > 0 && x < X && y < Y) {``        ``triangle(x, y, h, colorVal);``    ``}`` ` `    ``drawTriangles(x,``                  ``y - 2 * h / 3,``                  ``h / 2,``                  ``colorVal + 1);``    ``drawTriangles(x - h / ``sqrt``(3),``                  ``y + h / 3,``                  ``h / 2,``                  ``colorVal + 1);``    ``drawTriangles(x + h / ``sqrt``(3),``                  ``y + h / 3,``                  ``h / 2,``                  ``colorVal + 1);`` ` `    ``return` `0;``}`` ` `// Driver code``int` `main()``{``    ``initwindow(X, Y);``    ``trianglev2(X / 2, 2 * Y / 3, Y, 2);`` ` `    ``drawTriangles();``    ``getch();``    ``closegraph();`` ` `    ``return` `0;``}`

My Personal Notes arrow_drop_up