Example #1
0
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;
  	}
Example #2
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;
  }