Mandelbrot set atom finding. More...
Go to the source code of this file.
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.h.
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().