56#include "ramCanvas.hpp"
57#include "MRMathSTR.hpp"
61 std::chrono::time_point<std::chrono::system_clock> startTime = std::chrono::system_clock::now();
62 const int XSIZ = 7680/4;
63 const int YSIZ = 4320/4;
65 const int NUMFRM = 120;
67 const double zLevStart = -4.0;
68 const double zLevEnd = 4.0;
70 const double isectDistToGo = 5e7;
75 const double x0 = 0.0;
76 const double y0 = 2.0;
77 const double z0 = 1.0;
79 const double targetDist = 0.025;
80 const int maxNumUpBisect = 5;
81 const int maxNumDownBisect = 10;
83# pragma omp parallel for schedule(static,1)
84 for(
int frame=0; frame<NUMFRM; frame++) {
85 std::chrono::time_point<std::chrono::system_clock> frameStartTime = std::chrono::system_clock::now();
86 mjr::ramCanvas3c8b theRamCanvas(XSIZ, YSIZ, -10, 10, -10, 10);
87 double zLev = zLevStart + frame*(zLevEnd-zLevStart)/(NUMFRM-1);
98 double Xdelta, Ydelta, Zdelta, movDist;
99 while (dist < isectDistToGo) {
103 tDelta += (2 * tDelta);
104 Xdelta = (y) * tDelta;
105 Ydelta = (-x-z*y) * tDelta;
106 Zdelta = (y*y-a+b*z) * tDelta;
107 movDist = sqrt (fabs (Xdelta * Xdelta + Ydelta * Ydelta + Zdelta * Zdelta));
109 }
while ((numUpBisect < maxNumUpBisect) && (movDist < targetDist));
112 int numDownBisect = 0;
115 Xdelta = (y) * tDelta;
116 Ydelta = (-x-z*y) * tDelta;
117 Zdelta = (y*y-a+b*z) * tDelta;
118 movDist = sqrt (fabs (Xdelta * Xdelta + Ydelta * Ydelta + Zdelta * Zdelta));
120 }
while ((numDownBisect < maxNumDownBisect) && (movDist > targetDist));
127 if((z-zLev)*(zOld-zLev)<=0.0)
128 theRamCanvas.drawPoint((x+xOld)/2.0, (y+yOld)/2.0, mjr::ramCanvas3c8b::colorType::cornerColorEnum::WHITE);
134 theRamCanvas.writeTIFFfile(
"attracting_torus_shadowM_" + mjr::math::str::fmt_int(frame, 3,
'0') +
".tiff");
135 std::chrono::duration<double> frameRunTime = std::chrono::system_clock::now() - frameStartTime;
137 std::cout <<
"Frame " << frame <<
" of " << NUMFRM <<
" Runtime " << frameRunTime.count() <<
" sec" << std::endl;
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[])