34#include "ramCanvas.hpp"
35#include "MRMathSTR.hpp"
38typedef mjr::ramCanvas3c8b::colorType ct;
41double lp(std::complex<double> z,
int n) {
42 std::complex<double> lpv(0.0, 0.0);
43 for(
int i=0; i<n; i++)
44 lpv = std::pow(lpv, 2) + z;
45 return std::abs(lpv) - 2;
50 std::chrono::time_point<std::chrono::system_clock> startTime = std::chrono::system_clock::now();
51 const int IMGSIZ = 7680;
52 const int MAXITR = 1024;
53 const double MAXZSQ = 4.0;
54 const int NUMFRM = 10;
56# pragma omp parallel for schedule(static,1)
57 for(
int frame=1;frame<=NUMFRM;frame++) {
59 std::cout <<
"Frame " << frame <<
" of " << NUMFRM << std::endl;
60 mjr::ramCanvas3c8b theRamCanvas(IMGSIZ, IMGSIZ, -2.2, 0.8, -1.5, 1.5);
61 for(
int y=0;y<theRamCanvas.getNumPixY();y++) {
62 for(
int x=0;x<theRamCanvas.getNumPixX();x++) {
63 std::complex<double> c = theRamCanvas.int2real(x, y);
64 std::complex<double> z(0.0, 0.0);
65 double minDval = theRamCanvas.getCanvasWidD();
68 while((std::norm(z)<MAXZSQ) && (count<=MAXITR)) {
70 double ld = lp(z, frame);
71 if (std::abs(ld) < minDval) {
72 minDval = std::abs(ld);
73 minDsgn = (ld > 0 ? 1 : -1);
78 ct::csIntType csIdx =
static_cast<ct::csIntType
>(std::log(1+minDval)*100);
80 theRamCanvas.drawPoint(x, y, ct::csCCfractalYB::c(csIdx));
82 theRamCanvas.drawPoint(x, y, ct::csCCfractalYR::c(csIdx));
86 theRamCanvas.writeTIFFfile(
"mandelbrot_ltrap_" + mjr::math::str::fmt_int(frame, 2,
'0') +
".tiff");
88 std::chrono::duration<double> runTime = std::chrono::system_clock::now() - startTime;
89 std::cout <<
"Total Runtime " << runTime.count() <<
" sec" << std::endl;
int main(int argc, char *argv[])