Now that we've gotten warmed up on the /FancyStick wall smoothing - let's really cut it as close to the walls as possible (without slowing down). A pitfall of the other algorithms (theoretically speaking) is that they don't take into account that your bot can turn a **lot** tighter when it isn't going full speed. I'll come polish this post later (pressed for time), but here's a quick algorithm to give you the idea. I'm calling "drift" the distance your bot will travel toward the wall when it uses maximum accelleration *and* maximum turning angle. Even if you know you're not going to use max accelleration, I think it's best to smooth as thought you were; otherwise you're giving your enemy tips about your future plans. When this method gives you a "drift" that is shorter than your distance to the wall **next** tick, you need to turn now. The big challenge is, can you get this into a non-iterative solution? (which I believe will involve solving a recurrance relation, or a summation, whichever you like):

// s: the speed you will travel to arrive at the NEXT tick // a: the angle you would like to travel to arrive at the next tick, // before smoothing (which could be reversed from your bot's heading) double minDrift(double s, double a) { double r = 0.0; for (a += maxTurn(s); a < Math.PI; a += maxTurn(s)) { s += maxAccel(s); r += s * Math.sin(a); } return r; } double MIN_TURN = Math.toRadians(4.0); double TURN_RANGE = Math.toRadians(6.0); double maxTurn(double s) { return MIN_TURN + (TURN_RANGE * (1.0 - Math.abs(s) / 8.0)); } double maxAccel(double s) { if (s < 0.0) { return 2.0; } if (s <= 7.0){ return 1.0; } return 8.0 - s; }