void animate(int i) { GLfloat x, y; pointNode * last; if(!bPaused && !bComplete) { GLfloat displacement = calcDisplacement(minX, maxX, minY, maxY); last = curr; randomDisplacement(displacement, x, y); curr = AddNode(curr, curr->x + x, curr->y + y); count = pointCount(head); glutPostRedisplay(); //We only want to keep going if if(checkNode(curr, minX, maxX, minY, maxY)) { //keep a roughly constat fps glutTimerFunc(17, animate, 0); }else { findExitPoint(last, curr); bComplete = true; } } }
/** * performs one sweep, which means Nx*Ny random updates */ double performSweep() { int overlap = 0; #pragma omp parallel for for(int n=0; n<Nx*Ny; n++) { int i = randomIndex(gen); disc_t temp = discs[i]; double dx = randomDisplacement(gen); double dy = randomDisplacement(gen); temp.x += dx; temp.y += dy; if(doesOverlap(temp, i)) overlap++; else discs[i] = temp; } return ((double) overlap)/(Nx*Ny); }