示例#1
0
文件: main.cpp 项目: vbeffara/mtools
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;
  	}
示例#2
0
文件: OERRW.hpp 项目: vbeffara/mtools
 /* Plot the trace of the walk */
 void plotWalk() const
     {
     Plotter2D Plotter;
     auto L = makePlot2DLattice(*this, std::string("OERRW-d") + mtools::toString(delta));
     L.setImageType(L.TYPEIMAGE);
     Plotter[L];
     Plotter.gridObject(true)->setUnitCells();
     Plotter.range().setRange(zoomOut(fBox2(R)));
     Plotter.plot();
     }
示例#3
0
int main(int argc, char *argv[])
{
	MTOOLS_SWAP_THREADS(argc, argv);         // required on OSX, does nothing on Linux/Windows

	RGBc RR = RGBc::c_Red.getMultOpacity(0.5);
	RGBc GG = RGBc::c_Green.getMultOpacity(0.5);
	RGBc BB = RGBc::c_Blue.getMultOpacity(0.5);

	RGBc FF = RGBc::c_Yellow.getMultOpacity(0.5f);

	int64 L = 50;

	TestImage im(L, L);
	im.clear(RGBc(240,240,240));

	using namespace internals_bseg;




	fVec2 P1(10,10);

	fVec2 P2(37.49,25.49);

	fVec2 P3(13,20.99);

	im._bseg_draw(BSeg(P1, P2), true, RR);
	im._bseg_avoid1(BSeg(P1, P3), true, BSeg(P1, P2), true, GG);
	im._bseg_avoid11(BSeg(P2, P3), BSeg(P2, P1), true, BSeg(P3, P1), true, BB);

	im._bseg_fill_triangle(P1, P2, P3, FF);


	/*
	im.blendPixel({ 40, 9 }, BB);
	im.blendPixel({ 10, 9 }, BB);
	im.blendPixel({ 20, 9 }, BB);
	im.blendPixel({ 30, 9 }, BB);
	*/
	Plotter2D plotter;
	auto P = makePlot2DImage(im);
	plotter[P];
	plotter.range().setRange(fBox2{ -0.5, L - 0.5, -0.5, L - 0.5});

	plotter.gridObject(true);
	plotter.gridObject()->setUnitCells();

	plotter.plot();

	return 0;
	}
示例#4
0
文件: main.cpp 项目: vindar/mtools
/* 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;
}