Mandelbrot set atom finding. More...
Go to the source code of this file.
Macros | |
#define | VARS nx, ny, bx, by, wx, wy, zz, Ax, Ay, Bx, By, Cx, Cy, Dx, Dy, Ex, Ey, t1, t2, t3, t4, t5, t6, t7, t8, t9, t0, t01, t02, t03, t04 |
Functions | |
int | crosses_positive_real_axis (const mpfr_t ax, const mpfr_t ay, const mpfr_t bx, const mpfr_t by) |
Check if a line segment intersects with the positive real axis. | |
int | surrounds_origin (const mpfr_t ax, const mpfr_t ay, const mpfr_t bx, const mpfr_t by, const mpfr_t cx, const mpfr_t cy, const mpfr_t dx, const mpfr_t dy) |
Check if a square surrounds the origin. | |
int | did_escaped (const mpfr_t x, const mpfr_t y) |
Check if a point escaped. | |
unsigned int | boxperiod (const mpfr_t cx, const mpfr_t cy, const mpfr_t r, unsigned int maxperiod, void *abort_data, abort_t abort_fn) |
Find the lowest period of any atom inside a box. | |
int | muatom (int period, mpfr_t x, mpfr_t y, mpfr_t z, void *abort_data, abort_t abort_fn) |
Find an atom of a given period. |
Mandelbrot set atom finding.
Definition in file atom.c.
#define VARS nx, ny, bx, by, wx, wy, zz, Ax, Ay, Bx, By, Cx, Cy, Dx, Dy, Ex, Ey, t1, t2, t3, t4, t5, t6, t7, t8, t9, t0, t01, t02, t03, t04 |
Referenced by fpxx_approx_do(), and muatom().
unsigned int boxperiod | ( | const mpfr_t | cx, |
const mpfr_t | cy, | ||
const mpfr_t | r, | ||
unsigned int | maxperiod, | ||
void * | abort_data, | ||
abort_t | abort_fn | ||
) |
Find the lowest period of any atom inside a box.
Uses the Jordan curve method described here: http://mrob.com/pub/muency/period.html.
cx | The real part of the box center. |
cy | The imaginary part of the box center. |
r | The box radius. |
maxperiod | The maximum period to check until. |
Definition at line 87 of file atom.c.
References did_escaped(), and surrounds_origin().
Referenced by fpxx_start().
int crosses_positive_real_axis | ( | const mpfr_t | ax, |
const mpfr_t | ay, | ||
const mpfr_t | bx, | ||
const mpfr_t | by | ||
) |
Check if a line segment intersects with the positive real axis.
ax | The x coordinate of the first point. |
ay | The y coordinate of the first point. |
bx | The x coordinate of the second point. |
by | The y coordinate of the second point. |
Definition at line 23 of file atom.c.
Referenced by surrounds_origin().
int did_escaped | ( | const mpfr_t | x, |
const mpfr_t | y | ||
) |
Check if a point escaped.
This is a cheap inaccurate check using exponents. Inf/NaN are assumed escaped.
x | The real part of the point. |
y | The imaginary part of the point. |
Definition at line 71 of file atom.c.
Referenced by boxperiod().
int muatom | ( | int | period, |
mpfr_t | x, | ||
mpfr_t | y, | ||
mpfr_t | z, | ||
void * | abort_data, | ||
abort_t | abort_fn | ||
) |
Find an atom of a given period.
Uses Newton's method as described here: http://mathr.co.uk/mandelbrot/bonds.pdf. The method is iterated with increased precision until the nucleus and \(\frac{1}{2}\) bond are distint, which gives a size estimate and ensures the nucleus has sufficient precision.
period | The period of the nucleus. |
x | The real part of the nucleus (input: guess, output: nucleus). |
y | The imaginary part of the nucleus (input: guess, output: nucleus). |
z | The size of the nucleus (output valid when 1 is returned) |
Definition at line 151 of file atom.c.
References VARS.
Referenced by fpxx_start().
int surrounds_origin | ( | const mpfr_t | ax, |
const mpfr_t | ay, | ||
const mpfr_t | bx, | ||
const mpfr_t | by, | ||
const mpfr_t | cx, | ||
const mpfr_t | cy, | ||
const mpfr_t | dx, | ||
const mpfr_t | dy | ||
) |
Check if a square surrounds the origin.
ax | The x coordinate of the first point. |
ay | The y coordinate of the first point. |
bx | The x coordinate of the second point. |
by | The y coordinate of the second point. |
cx | The x coordinate of the third point. |
cy | The y coordinate of the third point. |
dx | The x coordinate of the fourth point. |
dy | The y coordinate of the fourth point. |
Definition at line 54 of file atom.c.
References crosses_positive_real_axis().
Referenced by boxperiod().