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.

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; ` `} ` |

*chevron_right*

*filter_none*

**Output:**