42#include "ramCanvas.hpp"
43#include "MRMathCPLX.hpp"
46typedef mjr::ramCanvas1c16b rcct;
47typedef mjr::ramCanvas3c8b rcrt;
51 std::chrono::time_point<std::chrono::system_clock> startTime = std::chrono::system_clock::now();
52 const int csize = 7680/8;
53 const int maxitr = 256*4;
54 const double escRad = 5.0;
55 const double z0r = 0.0;
56 const double z0i = 0.0;
58 const double sweepXmin = -2.0;
59 const double sweepXmax = 2.0;
60 const int sweepXres = csize*resMul;
61 const double sweepXdel = (sweepXmax-sweepXmin)/sweepXres;;
62 const int sweepYres = csize*resMul;
63 const double sweepYmin = -2.0;
64 const double sweepYmax = 2.0;
65 const double sweepYdel = (sweepYmax-sweepYmin)/sweepYres;
66 const double drawXmin = -1.8;
67 const double drawXmax = 1.2;
68 const double drawYmin = -1.5;
69 const double drawYmax = 1.5;
71 rcct ihstRamCanvas(csize, csize, drawXmin, drawXmax, drawYmin, drawYmax);
72 rcct imagRamCanvas(csize, csize, drawXmin, drawXmax, drawYmin, drawYmax);
73 rcct ohstRamCanvas(csize, csize, drawXmin, drawXmax, drawYmin, drawYmax);
74 rcct oirtRamCanvas(csize, csize, drawXmin, drawXmax, drawYmin, drawYmax);
75 rcct ojmpRamCanvas(csize, csize, drawXmin, drawXmax, drawYmin, drawYmax);
76 std::complex<double>* theOrbit =
new std::complex<rcct::coordFltType>[maxitr+1];
78 for(
int y=0;y<sweepYres;y++) {
79 if((y%(sweepYres/16))==0)
80 std::cout <<
"LINE: " << y <<
"/" << sweepYres << std::endl;
81 for(
int x=0;x<sweepXres;x++) {
82 std::complex<rcct::coordFltType> c(x * sweepXdel + sweepXmin, y * sweepYdel + sweepYmin);
83 std::complex<rcct::coordFltType> z(z0r, z0i);
84 for(rcct::colorChanType count=0; ; count++) {
85 z = std::pow(std::conj(z), 2) + c ;
86 if(std::abs(z)>escRad) {
87 for(rcct::colorChanType i=10; i<=count; i++) {
88 ohstRamCanvas.incPxChan(theOrbit[i]);
89 oirtRamCanvas.tformPixel(theOrbit[i], [i](
auto& c) { c.tfrmMax(i); });
90 rcct::colorChanType dst =
static_cast<rcct::colorChanType
>(std::abs(theOrbit[i]-theOrbit[i-1]) / escRad * rcct::colorType::maxChanVal);
91 ojmpRamCanvas.tformPixel(theOrbit[i], [dst](
auto& c) { c.tfrmMax(dst); });
94 }
else if(count>=(maxitr-1)) {
95 for(rcct::colorChanType i=10; i<=count; i++) {
96 rcct::colorChanType dst =
static_cast<rcct::colorChanType
>(std::abs(theOrbit[i]) / escRad * rcct::colorType::maxChanVal);
97 imagRamCanvas.tformPixel(theOrbit[i], [dst](
auto& c) {
if(c.isBlack()) c.setC0(dst);
else c.tfrmMin(dst); });
98 ihstRamCanvas.incPxChan(theOrbit[i]);
108 oirtRamCanvas.autoHistStrech();
109 oirtRamCanvas.writeTIFFfile(
"tricorn_orbits_oirt.tiff");
110 ohstRamCanvas.autoHistStrech();
111 ohstRamCanvas.writeTIFFfile(
"tricorn_orbits_ohst.tiff");
112 ihstRamCanvas.autoHistStrech();
113 ihstRamCanvas.writeTIFFfile(
"tricorn_orbits_ihst.tiff");
114 ojmpRamCanvas.autoHistStrech();
115 ojmpRamCanvas.writeTIFFfile(
"tricorn_orbits_ojmp.tiff");
116 imagRamCanvas.autoHistStrech();
117 imagRamCanvas.writeTIFFfile(
"tricorn_orbits_imag.tiff");
119 std::chrono::duration<double> runTime = std::chrono::system_clock::now() - startTime;
120 std::cout <<
"Total Runtime " << runTime.count() <<
" sec" << std::endl;
int main(int argc, char *argv[])