Julia set generator is a web application designed for the visualization of Julia sets using various computational methods and the demonstration of their mathematical properties through computer graphics. The application allows users to explore how different complex parameters c
affect the structure of Julia sets and to experiment with multiple rendering techniques, and orbit analysis. It serves not only as a tool for generating visually striking fractals, but also as an educational platform for understanding complex dynamics, iteration processes, and the deep connection between Julia sets and the Mandelbrot set. By providing interactive features and side-by-side comparisons, the application offers insight into the behavior of complex functions and supports learning, teaching, and further exploration of fractal geometry.
Feel free to explore the code, run the application, and customize it to suit your needs.
Contributions and feedback are welcome!
Let's have a function z_{n+1} = f(z_{n})
. The iterating process of this function means that an initial value (input) z_{0}
is selected and then the function is applied to z_{0}
,
which generates a result (output) z_{1}
. The output from the first iteration is used as the input to the next iteration and the cycle is repeated as long as needed.
Then the entire iteration process produces a sequence of values from individual iterations z_{0}, z_{1}, z_{2}, …
, which is often called an Orbit of z_{0}
.
These sets are generated by the same function:
z_{n+1} = z^2_{n} + c
, where z, c ∈ ℂ
.
However, there are a few differences.
The main difference is in the iteration process itself. For the Mandelbrot set, z_{0}
is always equal to 0
, and then every c
from the complex plane is tested — whether the orbit of z_{0}
for this particular c
after n
iterations (for n → ∞
) diverges or not.
If it does not diverge, c
lies in the Mandelbrot set. The orbit of z_{0} = 0
for the Julia and Mandelbrot set generating function is called the critical orbit.
Generally, the critical orbit is an orbit of an initial value where the function is non-differentiable.
In contrast to the Mandelbrot set, there are an infinite number of Julia sets. It means that each c
corresponds with a different Julia set.
Therefore, in the iteration process, c
is fixed, and every initial value z_{0}
from the complex plane is tested by the same technique as for the Mandelbrot set.
To be exact, the Julia set is only the boundary of the set of non-diverging orbits of initial values. However, in the following text, the Julia set is most of the time considered as a whole set,
more precisely called the filled Julia set.
The application consists of four parts, each focusing on a different conceptual or visual aspect of Julia and Mandelbrot sets:
Introduction (index.html)
This part serves as an entry point into the world of complex dynamics. It introduces the fundamental concepts behind Julia sets and the Mandelbrot set, explains the iteration process, and helps users build intuition for what these sets represent. It's designed for users with minimal prior knowledge, offering simple visualizations and step-by-step explanations.
Orbit (orbit.html)
The Orbit section explores the core idea of how points behave under repeated iteration of a function. It answers the question of whether a point lies inside or outside of the Julia or Mandelbrot set by analyzing the orbit of that point. This section visually demonstrates how the sequence z_0, z_1, z_2, ...
evolves and diverges or remains bounded. A key insight presented here is the connection between the orbit of z_0 = 0
in the Mandelbrot set and the behavior of corresponding Julia sets.
Scripts:
M vs. J (mandelbrotVsJulia.html)
This part focuses on the deep relationship between the Mandelbrot set (denoted as M) and the family of Julia sets (denoted as J). It showcases one of the central results in complex dynamics — the fundamental dichotomy. Specifically, it illustrates how the Mandelbrot set acts as a "map" or "catalogue" that determines the structure of each corresponding Julia set. For values of c
inside the Mandelbrot set, the Julia set is connected; for values of c
outside, the Julia set is totally disconnected (a dust of points).
Scripts:
J vs. J (JuliaVsJulia.html)
The final section, J vs. J, is dedicated to comparing different Julia sets and different methods of visualizing them. Users can interactively explore how small changes in the parameter c
affect the shape and connectivity of Julia sets. It also allows side-by-side comparison of rendering techniques (Escape time algorithm, Distance estimation method and Inverse iteration method), highlighting their strengths and limitations. This part is particularly useful for deeper exploration and understanding of visual patterns and for evaluating computational methods.
Scripts:
- JuliaVsJuliaL.js (All implemented rendering techniques used for visualizing Julia sets)
- JuliaVsJuliaR.js