38#include "ramCanvas.hpp"
41typedef mjr::ramCanvas3c8b rcT;
45 std::chrono::time_point<std::chrono::system_clock> startTime = std::chrono::system_clock::now();
48 const int MAXITR = 256;
49 const int CSIZE = 1024*USCALE;
50 rcT argRamCanvas(CSIZE, CSIZE, -2.2, 0.8, -1.5, 1.5);
51 rcT absRamCanvas(CSIZE, CSIZE, -2.2, 0.8, -1.5, 1.5);
52 rcT imRamCanvas( CSIZE, CSIZE, -2.2, 0.8, -1.5, 1.5);
53 rcT reRamCanvas( CSIZE, CSIZE, -2.2, 0.8, -1.5, 1.5);
55# pragma omp parallel for schedule(static,1)
56 for(rcT::coordIntType y=0;y<argRamCanvas.getNumPixY();y++) {
57 for(rcT::coordIntType x=0;x<argRamCanvas.getNumPixX();x++) {
59 std::complex<rcT::coordFltType> z(0.0, 0.0);
60 std::complex<rcT::coordFltType> c(argRamCanvas.int2realX(x), argRamCanvas.int2realY(y));
61 std::complex<rcT::coordFltType> orbit_sum(0.0, 0.0);
62 for(count=0; count<MAXITR ; count++) {
68 if (count == MAXITR) {
69 std::complex<mjr::ramCanvas1c64F::coordFltType> relative_orbit_mean = orbit_sum /
static_cast<double>(MAXITR)-c;
70 rcT::coordFltType clr_arg = (std::arg(relative_orbit_mean) + std::numbers::pi) / (2.0*std::numbers::pi);
71 argRamCanvas.drawPoint(x, y, rcT::colorType::csCColdeColdToHot::c(mjr::math::ivl::wrapCC(clr_arg, 1.0)));
72 rcT::coordFltType clr_abs = std::abs(relative_orbit_mean);
73 absRamCanvas.drawPoint(x, y, rcT::colorType::csCColdeColdToHot::c(mjr::math::ivl::wrapCC(clr_abs, 1.0)));
74 rcT::coordFltType clr_re = std::real(relative_orbit_mean);
75 reRamCanvas.drawPoint(x, y, rcT::colorType::csCColdeColdToHot::c(mjr::math::ivl::wrapCC(clr_re, 1.0)));
76 rcT::coordFltType clr_im = std::imag(relative_orbit_mean);
77 imRamCanvas.drawPoint(x, y, rcT::colorType::csCColdeColdToHot::c(mjr::math::ivl::wrapCC(clr_im, 1.0)));
83 argRamCanvas.scaleDownMax(DSCALE);
84 absRamCanvas.scaleDownMax(DSCALE);
85 reRamCanvas.scaleDownMax(DSCALE);
86 imRamCanvas.scaleDownMax(DSCALE);
89 argRamCanvas.drawString(
"arg", mjr::hershey::font::ROMAN_SL_SANSERIF, 90, 90,
"white", 1, 20);
90 absRamCanvas.drawString(
"abs", mjr::hershey::font::ROMAN_SL_SANSERIF, 90, 90,
"white", 1, 20);
91 reRamCanvas.drawString(
"re", mjr::hershey::font::ROMAN_SL_SANSERIF, 90, 90,
"white", 1, 20);
92 imRamCanvas.drawString(
"im", mjr::hershey::font::ROMAN_SL_SANSERIF, 90, 90,
"white", 1, 20);
94 argRamCanvas.writeTIFFfile(
"mandelbrot_meanOrbit_arg.tiff");
95 absRamCanvas.writeTIFFfile(
"mandelbrot_meanOrbit_abs.tiff");
96 reRamCanvas.writeTIFFfile(
"mandelbrot_meanOrbit_re.tiff");
97 imRamCanvas.writeTIFFfile(
"mandelbrot_meanOrbit_im.tiff");
99 std::chrono::duration<double> runTime = std::chrono::system_clock::now() - startTime;
100 std::cout <<
"Total Runtime " << runTime.count() <<
" sec" << std::endl;
int main(int argc, char *argv[])