# Creating Butterfly themed Fractal in C++ Using Graphics

In Layman’s terms, Fractals are beautiful patterns brought into existence upon the intertwining of computation and mathematics. To get a bit technical they are recursive in nature such that when looked upon a certain subset of a given fractal a similar pattern appears to emerge out of it.

Want to learn from the best curated videos and practice problems, check out the

**C++ Foundation Course**for Basic to Advanced C++ and**C++ STL Course**for the language and STL. To complete your preparation from learning a language to DS Algo and many more, please refer**Complete Interview Preparation Course****.**In this article, a new type of fractal pattern is generated, given as below:

**Approach:**

- Recursively go to the end branch of a Fractal tree.
- When the length of the branch reaches our threshold value, draw out that particular branch and exit out of the function.
- To keep the colors similar for a few iterations, we use type casting since
**((colorVal%15000)/1000+1)**would give out spectrums of same values, i.e. same colour thousand times before it iterates.

Below is the implementation of the above approach:

`// C++ code to Create a Butterfly ` `// themed Fractal using Graphics` ` ` `#include <math.h>` `#include <stdlib.h>` `#include <winbgim.h>` ` ` `#define Y 1080` `#define X 1920` ` ` `// c is defined as the angle between each` `// iterative lines, changing this would result` `// in different and interesting patterns.` `#define c 5 * M_PI / 7` ` ` `// colorVal is used to provide different colors` `// for each iterating point/line in the cycle.` `int` `colorVal = 0;` ` ` `// The core function in the program which is` `// recursive in nature and terminates when the` `// line size is less than 0.1 pixels.` `int` `Pyt_Tree(` `float` `x, ` `float` `y, ` `float` `r, ` `float` `ang)` `{` ` ` ` ` `// Max iteration condition so as to increase` ` ` `// the accuracy of the fractal pattern.` ` ` `// The closer it is to zero the higher the` ` ` `// details but would cost more processing time.` ` ` `if` `(r < 0.1) {` ` ` ` ` `// combination of type casting and iteration` ` ` `// so as to provide a Greatest Integer Function` ` ` `// sort of manipulation for the color input.` ` ` `setcolor((colorVal++ % 15000) / 1000 + 1);` ` ` ` ` `// Conversion of the parametric coordinates` ` ` `// of the points to the Argand coordinates` ` ` `// while displaying them.` ` ` `line(x, y, x - r * ` `sin` `(ang), y - r * ` `cos` `(ang));` ` ` ` ` `return` `0;` ` ` `}` ` ` ` ` `float` `r_n;` ` ` ` ` `if` `(c > M_PI / 4) {` ` ` `r_n = ` `sin` `(c);` ` ` `}` ` ` `else` `{` ` ` `r_n = ` `cos` `(c);` ` ` `}` ` ` ` ` `// Recursive calling of the Pyt_Tree() function` ` ` `// to get towards the end of the branch of the` ` ` `// fractal tree.` ` ` `Pyt_Tree(x - r * ` `sin` `(ang), y - r * ` `cos` `(ang),` ` ` `r / (2 * r_n), (ang + c));` ` ` `Pyt_Tree(x - r * ` `sin` `(ang), y - r * ` `cos` `(ang),` ` ` `r / (2 * r_n), (ang - c));` ` ` ` ` `return` `0;` `}` ` ` `// Driver code` `int` `main()` `{` ` ` `initwindow(X, Y);` ` ` `Pyt_Tree(X / 2, Y, Y * 0.9, 0);` ` ` `getch();` ` ` `closegraph();` ` ` `return` `0;` `}` |

**Output:**