I've added the Mandelbrot set to Very Plotter.
This was a fun project, especially doing various tests and enhancements to improve calculation speed. I wrote my own arbitrary precision code, based on the new-ish JavaScript BigInt
class.
It was also a worthwhile challenge, I think, to get the site usable on mobile (tested on iOS) devices, where most interactive JavaScript Mandelbrot viewers I've seen do not work so well on iPhones/iPads.
I originally wrote Very Plotter a couple months ago as a way to visualize prime numbers.
After adding a few other plots to that page, allowing the user to switch between several different plots, I guess it was only natural that I'd soon add the Mandelbrot set as well. And now the Internet has yet another Mandelbrot set viewer.
For background on the Mandelbrot set, I again will recommend the Numberphile YouTube channel and this video in particular.
Here are some sample images I've generated (click images view on Very Plotter, or here for the latest gallery):
If you find a particularly fascinating or beautiful location in the Mandelbrot using Very Plotter, I'd like to see it and include it in the gallery! Send me a link via mail to "phil" at this domain.
(for more tips, see this page)
(for the release history, see the releases page on GitHub)
repeat
and mirror
I learned a lot while building this Mandelbrot set viewer.
I re-familiarized myself with the UI-freezing nature of the single-threaded JavaScript environment, and experimented with several iterations of an approach at breaking down the very slow Mandelbrot set calculations into small chunks to allow the UI to be somewhat responsive.
This was also finally my chance to try out web workers. They are a bit cumbersome to setup and use, but not bad overall. The performance I got out of running 8 threads for the first time was mind blowing. Getting that to work was a cool moment. And I'm glad I first dealt with single-threaded calculation and rendering though, because it turned out that webkit/Safari browsers (and thus all iOS mobile browsers) still need to use that single-threaded approach.
Mostly for fun I decided to write my own arbitrary precision math functions. Since JavaScript has BigInt
s now, it didn't seem like a big undertaking. I was able to get it working relatively easily, and it was fun to re-write some functions to speed things up — mainly the "to string" and "from string" functions. I spent a day grafting an existing arbitrary precision library (decimal.js-light) into my code, and I was relieved to see that it wasn't any faster than mine.
I have a very long list of features/improvements I'd like to make for this Mandelbrot set viewer. If you have any feedback, bugs, etc., let me know! Send mail to "phil" at this domain.