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; }
/* 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; }
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; }