ArrayList<PVector> forces;
int cols, rows, granularity;
float gridX, gridY, xoff, yoff, zoff;
void rotate2D(PVector v, float theta) {
initforce= PVector.random2D();
movs = new ArrayList<Mover>();
forces = new ArrayList<PVector>();
for(int i = 0; i < cols * rows; i++){
xoff = map((i * gridX) % width, 0, width, 0, granularity);
yoff = map(floor((i)/cols) * gridY, 0, width, 0, granularity);
float angle = noise(xoff, yoff, zoff) * 2*PI;
translate((i * gridX) % width, floor((i)/cols) * gridY);
PVector force = new PVector(initforce.x, initforce.y);
Mover m = new Mover(new PVector(random(20, width - 20), random(20, height - 20)));
for(int i = 0; i < cols * rows; i++){
PVector force = forces.get(i);
translate((i * gridX) % width, floor((i)/cols) * gridY);
line(0, 0, force.x * 20, force.y * 20);
xoff = map((i * gridX) % width, 0, width, 0, granularity);
yoff = map(floor((i)/cols) * gridY, 0, width, 0, granularity);
float angle = noise(xoff, yoff, zoff) * 2*PI;
PVector f = new PVector(initforce.x, initforce.y);
if (floor(m.pos.x/gridX) + floor(m.pos.y/gridY) * (cols) < forces.size() ){
PVector f = forces.get(floor(m.pos.x/gridX) + floor(m.pos.y/gridY) * (cols) );