public void changeSpeed(SmartblobTri blob, float secondsSinceLastCall) { float minSq = minSpeed * minSpeed; float maxSq = maxSpeed * maxSpeed; for (MovCorner c : blob.allMovCorners()) { float dy = c.speedY, dx = c.speedX; float speedSq = dy * dy + dx * dx; if (minSq <= speedSq && speedSq <= maxSq) continue; if (speedSq == 0) continue; // rare. it will be pushed on by springs and probably have nonzero speed next // time. float speed = (float) Math.sqrt(speedSq); float newSpeed = Math.max(minSpeed, Math.min(speed, maxSpeed)); float mult = newSpeed / speed; c.speedY *= mult; c.speedX *= mult; } }