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; } |
Output: