#include "mandelbrot.h" #include "utils.h" #include #include using namespace mpfr; Mandelbrotc::Mandelbrotc(Vec2mp const &f, Vec2mp const &t, Vec2i const &s, uint32_t mi) : f(f), t(t), s(s), max_iter(mi) { this->threads = std::vector(); this->screen = std::vector>(); } void Mandelbrotc::start_threads() { } void Mandelbrotc::calc(const uint8_t tid) { mpreal x, y; for(double i = tid; i < this->s.x; i+=this->thread_count) { for(double j = 0; j < this->s.y; j++) { x = (mpfr::abs(this->f.x - this->t.x) * (i / this->s.x)) + this->f.x; y = (mpfr::abs(this->f.y - this->t.y) * (j / this->s.y)) + this->f.y; this->screen[i][j] = mandelbrot(Vec2mp(x, y)); } } } uint32_t Mandelbrotc::mandelbrot(const Vec2mp &n) { uint32_t iter = 0; // BigFloat x = BigFloat(n.x.precision); // x.setValue(0.0); // BigFloat y = BigFloat(n.y.precision); // y.setValue(0.0); mpreal x = mpreal(0.0); mpreal xtemp = mpreal(0.0); mpreal y = mpreal(0.0); mpreal x2 = mpreal(0.0); mpreal y2 = mpreal(0.0); while (x*x + y*y <= 4 && iter < max_iter) { xtemp = x*x - y*y + n.x; y = 2*x*y+n.y; x = xtemp; iter++; } return iter; }