int w = 300, h = 300; float[] phase, newPhase; float speed = 0.3; float[] sinLUT; float LUTSize; Thing[] things; void setup() { size(w,h,P3D); phase = new float[w*h]; newPhase = new float[w*h]; int lutSize = 4000; LUTSize = (float) lutSize; sinLUT = new float[lutSize]; for (int i=0; i=0 && mouseX=0 && mouseY0 && posY>0) { c = newPhase[(posY-1)*w+posX-1]; int nn = nearestNeighbor(posX-1,posY-1); if (c>maxPhase && (nn>minSqrDist ^ nn>nearestNeighbor(posX,posY)) ) { maxPhase = c; mPosX = posX-1; mPosY = posY-1; } } if (posY>0) { c = newPhase[(posY-1)*w+posX]; int nn = nearestNeighbor(posX,posY-1); if (c>maxPhase && (nn>minSqrDist ^ nn>nearestNeighbor(posX,posY)) ) { maxPhase = c; mPosX = posX; mPosY = posY-1; } } if (posX0) { c = newPhase[(posY-1)*w+posX+1]; int nn = nearestNeighbor(posX+1,posY-1); if (c>maxPhase && (nn>minSqrDist ^ nn>nearestNeighbor(posX,posY)) ) { maxPhase = c; mPosX = posX+1; mPosY = posY-1; } } if (posX>0) { c = newPhase[(posY)*w+posX-1]; int nn = nearestNeighbor(posX-1,posY); if (c>maxPhase && (nn>minSqrDist ^ nn>nearestNeighbor(posX,posY)) ) { maxPhase = c; mPosX = posX-1; mPosY = posY; } } if (posXmaxPhase && (nn>minSqrDist ^ nn>nearestNeighbor(posX,posY)) ) { maxPhase = c; mPosX = posX+1; mPosY = posY; } } if (posX>0 && posYmaxPhase && (nn>minSqrDist ^ nn>nearestNeighbor(posX,posY)) ) { maxPhase = c; mPosX = posX-1; mPosY = posY+1; } } if (posYmaxPhase && (nn>minSqrDist ^ nn>nearestNeighbor(posX,posY)) ) { maxPhase = c; mPosX = posX; mPosY = posY+1; } } if (posXmaxPhase && (nn>minSqrDist ^ nn>nearestNeighbor(posX,posY)) ) { maxPhase = c; mPosX = posX+1; mPosY = posY+1; } } posX = mPosX; posY = mPosY; fill(255,96,0); ellipseMode(CENTER); ellipse(posX,posY,6,6); } public int nearestNeighbor(int x, int y) { int m = 300000000; for (int i=0; i