Install
Dependencies
- pkg-config
- math
- gmp
- mpfr
- mpc
- pari
- ghci
- cairo ( and pixman )
- mandelbrot-numerics
- mandelbrot-symbolics
- openmp
shared libraries
ldd m-render
linux-vdso.so.1 => (0x00007ffcae4e7000)
libmandelbrot-graphics.so => /home/a/opt/lib/libmandelbrot-graphics.so (0x00007fb8f9a12000)
libcairo.so.2 => /usr/lib/x86_64-linux-gnu/libcairo.so.2 (0x00007fb8f96df000)
libmandelbrot-numerics.so => /home/a/opt/lib/libmandelbrot-numerics.so (0x00007fb8f94cf000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fb8f92b2000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fb8f8ee9000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fb8f8bdf000)
libgomp.so.1 => /usr/lib/x86_64-linux-gnu/libgomp.so.1 (0x00007fb8f89bd000)
libpixman-1.so.0 => /usr/lib/x86_64-linux-gnu/libpixman-1.so.0 (0x00007fb8f8715000)
libfontconfig.so.1 => /usr/lib/x86_64-linux-gnu/libfontconfig.so.1 (0x00007fb8f84d1000)
libfreetype.so.6 => /usr/lib/x86_64-linux-gnu/libfreetype.so.6 (0x00007fb8f8227000)
libpng12.so.0 => /lib/x86_64-linux-gnu/libpng12.so.0 (0x00007fb8f8002000)
libxcb-shm.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0 (0x00007fb8f7dfd000)
libxcb-render.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-render.so.0 (0x00007fb8f7bf3000)
libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007fb8f79d1000)
libXrender.so.1 => /usr/lib/x86_64-linux-gnu/libXrender.so.1 (0x00007fb8f77c6000)
libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007fb8f748c000)
libXext.so.6 => /usr/lib/x86_64-linux-gnu/libXext.so.6 (0x00007fb8f727a000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fb8f705f000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fb8f6e57000)
libmpc.so.3 => /usr/local/lib/libmpc.so.3 (0x00007fb8f6c3e000)
libmpfr.so.4 => /usr/local/lib/libmpfr.so.4 (0x00007fb8f69db000)
libgmp.so.10 => /usr/local/lib/libgmp.so.10 (0x00007fb8f6764000)
/lib64/ld-linux-x86-64.so.2 (0x0000564eca780000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fb8f6560000)
libexpat.so.1 => /lib/x86_64-linux-gnu/libexpat.so.1 (0x00007fb8f6336000)
libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007fb8f6132000)
libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007fb8f5f2b000)
objdump -p m-render | grep NEEDED
NEEDED libmandelbrot-graphics.so
NEEDED libcairo.so.2
NEEDED libmandelbrot-numerics.so
NEEDED libpthread.so.0
NEEDED libc.so.6
objdump -p m-stretching-cusps | grep NEEDED
NEEDED libmandelbrot-graphics.so
NEEDED libcairo.so.2
NEEDED libmandelbrot-numerics.so
NEEDED libm.so.6
NEEDED libgmp.so.10
NEEDED libpthread.so.0
NEEDED libc.so.6
git
git clone https://code.mathr.co.uk/mandelbrot-graphics.git
and in the directory containing mandelbrot-graphics:
make -C mandelbrot-graphics/c/lib prefix=${HOME}/opt install make -C mandelbrot-graphics/c/bin prefix=${HOME}/opt install
hen to run do:
export LD_LIBRARY_PATH=${HOME}/opt/lib
check :
echo $LD_LIBRARY_PATH
result :
/home/a/opt/lib
or
export PATH=${HOME}/opt/bin:${PATH}
check :
echo $PATH
To set it permanently change file :
update
git
From console opened in the mandelbrot-graphics directory :
git pull
If you made some local changes you can undu them :
git checkout -f
then
git pull
Now install again
How to use it ?
code
- C source should *only* have #include <mandelbrot-numerics.h>
- compile and link with pkg-config: see mandelbrot-numerics/c/bin/Makefile for an example
- quickest way to get started is to just put your file in mandelbrot-numerics/c/bin and run make
procedures
m_d_transform *rect = m_d_transform_rectangular(w, h, c, r); //
where :
- w = width in pixels
- h = height in pixels
- c = center of the image ( complex number )
- r = radius of the image ( double number
binaries
List :
~/mandelbrot-graphics/c/bin$ ls -1a *.c
result :
m-cardioid-warping.c
m-render.c
m-subwake-diagram-b.c
m-dense-misiurewicz.c
m-stretching-cusps.c
m-subwake-diagram-c.c
m-feigenbaum-zoom.c
m-subwake-diagram-a.c
m-furcation-rainbow
For non-real C you can plot all the limit-cycle Z on one image, chances of overlap are small. You can colour according to the position along the path. In attached I have coloured using hue red at roots, going through yellow towards the next bond point in a straight line through the interior coordinate space (interior coordinate is derivative of limit cycle). I have just plotted points, so there are gaps. Perhaps it could be improved by drawing line segments between Z values, but I'm not 100% sure if the first Z value found will always correspond to the same logical line, and keeping track of a changing number of "previous Z" values isn't too fun either. Claude[3]
Run:
/m-furcation-rainbow 13.png "1/3" "1/3" "1/3"
m-dense-misiurewicz
![](../../I/m/Zoom_around_principal_Misiurewicz_point_for_periods_from_2_to_1024.gif)
Program is based on m-render.c from mandelbrot-graphics.
It draws series of png images
cardioid warping
![](../../I/m/Conformal_Warping_Around_The_Cardioid_In_The_Mandelbrot_Set.gif)
The exterior of the cardioid in the Mandelbrot set is warped to give the appearance of rotation.
The transformation is built up from smaller components, including:
- mapping of the cardioid to a circle
- Moebius transform of the circle to a straight line
- linear translation (which is animated)
- the inverses of the linear translation
- the inverse of Moebius transform of the circle to a straight line
These transformations and their derivatives (for distance estimator colouring) are described here: https://mathr.co.uk/blog/2013-12-16_stretching_cusps.html
The program to render the animation was implemented in C using the mandelbrot-graphics library found here: https://code.mathr.co.uk/mandelbrot-graphics The program is found in the repository as c/bin/m-cardioid/warping.c https://code.mathr.co.uk/mandelbrot-graphics/blob/60adc5ab8f14aab1be479469dfcf5ad3469feea0:/c/bin/m-cardioid-warping.c
What it the relation between x and internal angle ?
Hairness
![](../../I/m/Zoom_About_Feigenbaum_Point_In_The_Mandelbrot_Set_Showing_Hairiness.gif)
m-stretching-cusps
One can add usage description :
if (! (argc == 7)) {
printf("no input \n");
printf("example usage : \n");
printf("%s re(nucleus) im(nucleus) period t_zero t_one t_infinity \n", argv[0] );
printf("%s 0 0 1 ? ? ? \n", argv[0] );
return 1;
}
What values should I put instead of ???
bond point c coordinates, corresponding to
- zero <- a/b
- one <- (a+c)/(b+d)
- infinity <- c/d
to have the cusp at c/d stretched out to infinity, with a/b in the center of the view (mapped to 0)
m-render
It is a base program for others.
This fragment of code describes how to use it :
int main(int argc, char **argv) {
if (argc != 8) {
fprintf(stderr, "usage: %s out.png width height creal cimag radius maxiters\n", argv[0]);
return 1;
}
example use will be :
m-render a.png 1000 1000 -0.75 0 1.5 10000
The result is Mandelbrot set boundary using DEM
![](../../I/m/Mandelbrot_DEM_Sobel.png)
m-streching-feigenbaum.c
- Feigenbaum stretch with external rays ( period doubling cascade)
m-subwake-diagram-a
![](../../I/m/Wakes_near_the_period_1_continent_in_the_Mandelbrot_set.png)
m-subwake-diagram-b
![](../../I/m/Wakes_near_the_period_3_island_in_the_Mandelbrot_set.png)
m-subwake-diagram-c
![](../../I/m/Wakes_along_the_main_antenna_in_the_Mandelbrot_set.png)