Beispiel #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;
  	}
Beispiel #2
0
/* run the simulation */
void run()
{
    cout << "\nSimulating : zoom in to view the details of the tree structure...\n";
    auto P = makePlot2DLattice(EC, "Tree Eden model"); P.opacity(0.5);
    P.setImageType(P.TYPEIMAGE);
    Plotter2D Plotter;
    Plotter[P];
    Plotter.startPlot();
    Plotter.range().setRange(unionRect(mtools::zoomOut(EC.range()), fBox2(-5000, 5000, -5000, 5000)));
    Plotter.autoredraw(600);
    cout << EC.toString();
    watch("Cluster size", EC, printSize);
    while (Plotter.shown())
        {
        if (EC.size() % 10000000 == 0) cout << EC.toString();
        EC.simulate(1000000);
        }
    watch.remove("Cluster size");
    return;
}
Beispiel #3
0
int main(int argc, char *argv[]) 
    {
    MTOOLS_SWAP_THREADS(argc, argv);		
	parseCommandLine(argc,argv,false);
    cout << "******************************\n";
    cout << "internal DLA on Z2\n";
    cout << "******************************\n";
    int autoredraw = arg('a', 300).info("autoredraw rate");
    Grid.reset(0, 1, false);
    Grid.set(0, 0, 1); // initial cluster. 
    Plotter2D P;
    auto Cl = makePlot2DLattice(LatticeObj<colorCluster>::get(), "iDLA cluster"); P[Cl]; Cl.opacity(0.5);
    auto Ci = makePlot2DLattice(LatticeObj<colorCircle>::get(), "Circle"); P[Ci]; Ci.opacity(0.5);
    P.autoredraw(autoredraw);
    P.startPlot();
    Chronometer();
    watch("# of particles", N);
    while (P.shown())
        {
        makeCluster(1000);
        }
    return 0;
	}