Fractals/mandelbrot-graphics

From Wikibooks, open books for an open world
Jump to navigation Jump to search

Install[edit]

Dependencies[edit]

shared libraries[edit]

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[edit]

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 :

  • .profile[1]
  • /etc/ld.so.conf.d/*.conf[2]

update[edit]

git[edit]

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 ?[edit]

procedures[edit]

 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[edit]

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-dense-misiurewicz[edit]

Zoom around principal Misiurewicz point for periods from 2 to 1024

Program is based on m-render.c from mandelbrot-graphics.

It draws series of png images

cardioid warping[edit]

Conformal Warping Around The Cardioid In The Mandelbrot Set

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[edit]

Zoom About Feigenbaum Point In The Mandelbrot Set Showing Hairiness

m-stretching-cusps[edit]

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[edit]

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

Baoundary of Mandelbrot set

m-subwake-diagram-a[edit]

m-subwake-diagram-a

m-subwake-diagram-b[edit]

m-subwake-diagram-b

m-subwake-diagram-c[edit]

m-subwake-diagram-c

References[edit]

  1. stackoverflow question how-to-permanently-set-path-on-linux
  2. ubuntu environment Variables