int main(int argc, char *argv[]) { MTOOLS_SWAP_THREADS(argc, argv); parseCommandLine(argc, argv, true); cout << "**************************************\n"; cout << "Simulation of a 1D simple random walk.\n"; cout << "**************************************\n"; bool autorange = arg("auto").info("update the plotter's range automatically"); cout << "\nSimulating...\n"; MT2004_64 gen; // the RNG std::vector<int> tab; // the vector containing the positions int pos = 0; // current position Plotter2D P; // the plotter object auto PF1 = makePlot2DFun(f1); // the first function plot object auto PF2 = makePlot2DFun(f2); // the second function plot object auto PV = makePlot2DVector(tab); // the vector plot, use natural dynamically growing range. P[PV][PF1][PF2]; // insert everything in the plotter PV.interpolationLinear(); // use linear interpolation PV.hypograph(true); // fill the hypograph PV.hypographOpacity(0.3f); // but make it half transparent P.autoredraw(60); // the plotter window should redraw itself at least every second (more in fact since it redraws after unsuspending) P.range().fixedAspectRatio(false); // disable the fixed aspect ratio if (!autorange) P.range().setRange(fBox2(-1.0e7, 5.0e8, -60000, 60000)); // set the range (if not automatic adjustment) P.startPlot(); // display the plotter while (P.shown()) // loop until the plotter window is closed { while (tab.size() < tab.capacity()) { pos += ((Unif(gen) < 0.5) ? -1 : 1); tab.push_back(pos); } // fill the vector with new steps of the walk until its capacity() PV.suspend(true); // suspend access to PV while we reallocate the vector memory. tab.reserve(tab.capacity() + 1000000); // reserve more space PV.suspend(false); // resume access to the graph. if (autorange) P.autorangeXY(); // autorange (causes a redraw) } return 0; }
int main(int argc, char *argv[]) { MTOOLS_SWAP_THREADS(argc,argv); // required on OSX, does nothing on Linux/Windows cout << "Hello from the console !"; // print on mtools::cout console (saved in cout.text) Image im(800, 600, RGBc(220,220,220)); // image of size 800x600 with a light gray background // draw on the image im.draw_thick_filled_ellipse_in_box(fBox2( 100,400,50,550 ), 20,60, RGBc::c_Green.getMultOpacity(0.5f), RGBc::c_Cyan); im.draw_text({400, 300}, "Hello\n World!",MTOOLS_TEXT_CENTER,RGBc::c_Red.getMultOpacity(0.5f), 200); im.draw_cubic_spline({ {10,10},{100,100},{200,30},{300,100}, {600,10} , {700,300}, {720, 500}, {600, 480}, {400,500} }, RGBc::c_Yellow.getMultOpacity(0.5f), true, true, true, 3); // display the image auto P = makePlot2DImage(im); // Encapsulate the image inside a 'plottable' object. Plotter2D plotter; // Create a plotter object plotter.axesObject(false); // Remove the axe system. plotter[P]; // Add the image to the list of objects to draw. plotter.autorangeXY(); // Set the plotter range to fit the image. plotter.plot(); // start interactive display. return 0; }