#include using std::vector; #include #include #include #include //------------------------------------------------------ int getIndexGrid2D(int i, int j, int nColumn) // for a 2D grid, stored in an array, return the idx given by two indices { int idx = j*nColumn+i; return idx; } //------------------------------------------------------ void DrawLattice(int length, float frac) { // the square lattice TCanvas *c = new TCanvas("Lattice","Lattice",800,800); c->Range(-1,-1,length+1,length+1); TBox *bLattice = new TBox(0,0,length,length); bLattice->SetLineColor(kBlack); bLattice->SetLineWidth(2); bLattice->SetFillStyle(0); bLattice->Draw("l"); // the grid for(int i=1;iSetLineWidth(1); lh->SetLineColor(18); lh->Draw(); TLine *lv = new TLine(i,0,i,length); lv->SetLineWidth(1); lv->SetLineColor(18); lv->Draw(); } // fill a fraction with random boxes vector grid(length*length,0); int nb = (int) (length*length*frac); int i=0; do { int x = (int) gRandom->Uniform(0,length); int y = (int) gRandom->Uniform(0,length); int idx = getIndexGrid2D(x,y,length); if (grid[idx]==1) continue; i++; grid[idx]=1; TBox *b = new TBox(x,y,x+1,y+1); b->SetFillColor(2); b->SetFillStyle(1001); b->Draw(); } while (i<=nb); }