46#include "ramCanvas.hpp"
47#include "MRMathCPLX.hpp"
50typedef mjr::ramCanvas1c16b rcct;
51typedef mjr::ramCanvas3c8b rcrt;
55 std::chrono::time_point<std::chrono::system_clock> startTime = std::chrono::system_clock::now();
56 const int csize = 7680/8;
57 const int maxitr = 256*4;
58 const double escRad = 5.0;
75 const double z0r = 0.0;
76 const double z0i = 0.0;
78 const double sweepXmin = -2.0;
79 const double sweepXmax = 2.0;
80 const int sweepXres = csize*resMul;
81 const double sweepXdel = (sweepXmax-sweepXmin)/sweepXres;;
82 const int sweepYres = csize*resMul;
83 const double sweepYmin = -2.0;
84 const double sweepYmax = 2.0;
85 const double sweepYdel = (sweepYmax-sweepYmin)/sweepYres;
86 const double drawXmin = -1.8;
87 const double drawXmax = 1.2;
88 const double drawYmin = -1.5;
89 const double drawYmax = 1.5;
91 rcct ihstRamCanvas(csize, csize, drawXmin, drawXmax, drawYmin, drawYmax);
92 rcct imagRamCanvas(csize, csize, drawXmin, drawXmax, drawYmin, drawYmax);
93 rcct ohstRamCanvas(csize, csize, drawXmin, drawXmax, drawYmin, drawYmax);
94 rcct oirtRamCanvas(csize, csize, drawXmin, drawXmax, drawYmin, drawYmax);
95 rcct ojmpRamCanvas(csize, csize, drawXmin, drawXmax, drawYmin, drawYmax);
96 std::complex<double>* theOrbit =
new std::complex<rcct::coordFltType>[maxitr+1];
98 for(
int y=0;y<sweepYres;y++) {
99 if((y%(sweepYres/16))==0)
100 std::cout <<
"LINE: " << y <<
"/" << sweepYres << std::endl;
101 for(
int x=0;x<sweepXres;x++) {
102 std::complex<rcct::coordFltType> c(x * sweepXdel + sweepXmin, y * sweepYdel + sweepYmin);
103 std::complex<rcct::coordFltType> z(z0r, z0i);
104 for(rcct::colorChanType count=0; ; count++) {
106 z = std::pow(std::conj(z), 2) + c ;
107 if(std::abs(z)>escRad) {
108 for(rcct::colorChanType i=10; i<=count; i++) {
109 ohstRamCanvas.incPxChan(theOrbit[i]);
110 oirtRamCanvas.tformPixel(theOrbit[i], [i](
auto& c) { c.tfrmMax(i); });
111 rcct::colorChanType dst =
static_cast<rcct::colorChanType
>(std::abs(theOrbit[i]-theOrbit[i-1]) / escRad * rcct::colorType::maxChanVal);
112 ojmpRamCanvas.tformPixel(theOrbit[i], [dst](
auto& c) { c.tfrmMax(dst); });
115 }
else if(count>=(maxitr-1)) {
116 for(rcct::colorChanType i=10; i<=count; i++) {
117 rcct::colorChanType dst =
static_cast<rcct::colorChanType
>(std::abs(theOrbit[i]) / escRad * rcct::colorType::maxChanVal);
118 imagRamCanvas.tformPixel(theOrbit[i], [dst](
auto& c) {
if(c.isBlack()) c.setC0(dst);
else c.tfrmMin(dst); });
119 ihstRamCanvas.incPxChan(theOrbit[i]);
129 oirtRamCanvas.autoHistStrech();
130 oirtRamCanvas.writeTIFFfile(
"working_orbits_oirt.tiff");
131 ohstRamCanvas.autoHistStrech();
132 ohstRamCanvas.writeTIFFfile(
"working_orbits_ohst.tiff");
133 ihstRamCanvas.autoHistStrech();
134 ihstRamCanvas.writeTIFFfile(
"working_orbits_ihst.tiff");
135 ojmpRamCanvas.autoHistStrech();
136 ojmpRamCanvas.writeTIFFfile(
"working_orbits_ojmp.tiff");
137 imagRamCanvas.autoHistStrech();
138 imagRamCanvas.writeTIFFfile(
"working_orbits_imag.tiff");
140 std::chrono::duration<double> runTime = std::chrono::system_clock::now() - startTime;
141 std::cout <<
"Total Runtime " << runTime.count() <<
" sec" << std::endl;
int main(int argc, char *argv[])