40#include "ramCanvas.hpp"
41#include "MRMathSTR.hpp"
44typedef mjr::ramCanvas3c8b::colorType ct;
48 std::chrono::time_point<std::chrono::system_clock> startTime = std::chrono::system_clock::now();
49 const int JULIA_MAXITR = 1024;
50 const double JULIA_MAXZSQ = 4.0;
51 const int IMGSIZ = 7680/8;
52 const int MANDL_MAXITR = 1024;
53 const double MANDL_MAXZSQ = 4.0;
54 mjr::ramCanvas3c8b manRamCanvas(IMGSIZ, IMGSIZ, -2.2, 0.8, -1.5, 1.5);
57 std::vector<double> mcX;
58 std::vector<double> mcY;
60 std::ifstream iStream(
"../data/mandelbrot_curve_10.txt", std::ios_base::binary);
61 if (!(iStream.good()))
63 while(iStream.good()) {
64 iStream.getline(strBuf, 100,
'\n');
65 std::string strBufS(strBuf);
66 if (strBufS.length() > 0) {
67 std::string::size_type pos;
68 std::string::size_type tagIdx = strBufS.find_first_of(
"\t ,");
69 mcX.push_back(std::stod(strBufS.substr(0, tagIdx), &pos));
70 mcY.push_back(std::stod(strBufS.substr(tagIdx+1), &pos));
73 int numPts =
static_cast<int>(mcX.size());
76 for(
int y=0;y<manRamCanvas.getNumPixY();y++) {
77 for(
int x=0;x<manRamCanvas.getNumPixX();x++) {
78 std::complex<double> c = manRamCanvas.int2real(x, y);
79 std::complex<double> z(0.0, 0.0);
81 while((std::norm(z)<MANDL_MAXZSQ) && (count<=MANDL_MAXITR)) {
85 if(count < MANDL_MAXITR)
86 manRamCanvas.drawPoint(x, y, ct::csCColdeFireRamp::c(
static_cast<ct::csIntType
>(count*20)));
90 for(
int frame=0; frame<numPts; frame++)
91 manRamCanvas.drawLine(mcX[frame], mcY[frame], mcX[(frame+1)%numPts], mcY[(frame+1)%numPts],
"white");
94 for(
int frame=0; frame<numPts; frame++) {
96 mjr::ramCanvas3c8b julRamCanvas(IMGSIZ, IMGSIZ, -2.2, 2.2, -2.2, 2.2);
97 std::cout <<
"Frame: " << frame <<
" of " << numPts << std::endl;
98 std::complex<double> c = std::complex<double>(mcX[frame], mcY[frame]);
99 for(
int y=0;y<julRamCanvas.getNumPixY();y++) {
100 for(
int x=0;x<julRamCanvas.getNumPixX();x++) {
101 std::complex<double> z(julRamCanvas.int2realX(x), julRamCanvas.int2realY(y));
103 while((std::norm(z)<JULIA_MAXZSQ) && (count<=JULIA_MAXITR)) {
104 z=std::pow(z, 2) + c;
107 if(count < JULIA_MAXITR)
108 julRamCanvas.drawPoint(x, y, ct::csCColdeFireRamp::c(
static_cast<ct::csIntType
>(count*20)));
112 mjr::ramCanvas3c8b setRamCanvas(manRamCanvas);
113 setRamCanvas.drawFillCircle(c, 0.04,
"white");
114 setRamCanvas.scaleDownMean(4);
115 julRamCanvas.insertCanvas(setRamCanvas, 0, 0);
116 julRamCanvas.drawRectangle(0, 0, IMGSIZ/4, IMGSIZ/4,
"white");
118 julRamCanvas.drawString(
"MJR 2022", mjr::hershey::font::ROMAN_SL_SANSERIF, IMGSIZ-IMGSIZ/6, 20,
"white", 1, 20);
120 julRamCanvas.writeTIFFfile(
"juliaM2_" + mjr::math::str::fmt_int(frame, 3,
'0') +
".tiff");
123 std::chrono::duration<double> runTime = std::chrono::system_clock::now() - startTime;
124 std::cout <<
"Total Runtime " << runTime.count() <<
" sec" << std::endl;
int main(int argc, char *argv[])