44#include "ramCanvas.hpp"
45#include "MRMathSTR.hpp"
49 std::chrono::time_point<std::chrono::system_clock> startTime = std::chrono::system_clock::now();
50 const int BSIZ = 6400;
51 const int NUMFRM = 15*6;
52 const double R = 0.002;
53 const double ANGMIN = 0.0;
54 const double ANGMAX = std::numbers::pi*2;
55 const uint64_t MAXITR = 10000000;
57# pragma omp parallel for schedule(static,1)
58 for(
int frame=0; frame<NUMFRM; frame++) {
59 mjr::ramCanvas1c16b theRamCanvas(BSIZ, BSIZ, -0.6, 0.6, -0.25, 1.0);
60 decltype(theRamCanvas)::coordFltType angle = frame*(ANGMAX-ANGMIN)/NUMFRM+ANGMIN;
61 decltype(theRamCanvas)::coordFltType a = 0.382110 + R * std::cos(angle);
62 decltype(theRamCanvas)::coordFltType b = -1.012590 + R * std::sin(angle);
63 decltype(theRamCanvas)::coordFltType xn = 0;
64 decltype(theRamCanvas)::coordFltType yn = 0;
65 for(uint64_t i=0;i<MAXITR;i++) {
66 decltype(theRamCanvas)::coordFltType tmp = std::sin(xn*xn-yn*yn+a);
67 yn = std::cos(2*xn*yn+b);
70 decltype(theRamCanvas)::coordIntType ix = theRamCanvas.real2intX(xn);
71 decltype(theRamCanvas)::coordIntType iy = theRamCanvas.real2intY(yn);
72 if (theRamCanvas.isOnCanvas(ix, iy))
73 theRamCanvas.getPxColorRefNC(ix, iy).tfrmAdd(1);
76 theRamCanvas.autoHistStrech();
77 theRamCanvas.applyHomoPixTfrm(&
decltype(theRamCanvas)::colorType::tfrmPow, 1/4.0);
78 theRamCanvas.rotate90CW();
79 theRamCanvas.scaleDownMean(8);
80 theRamCanvas.autoHistStrech();
82 std::cout <<
"FRAME(" << frame <<
"): DONE" << std::endl;
83 theRamCanvas.writeTIFFfile(
"simone_attractor_bmovie_" + mjr::math::str::fmt_int(frame, 4,
'0') +
".tiff",
84 mjr::ramCanvasPixelFilter::ColorSchemeOnChan<
decltype(theRamCanvas),
86 mjr::color3c8b::csCColdeFireRamp>(theRamCanvas));
89 std::chrono::duration<double> runTime = std::chrono::system_clock::now() - startTime;
90 std::cout <<
"Total Runtime " << runTime.count() <<
" sec" << std::endl;
int main(int argc, char *argv[])