Platon, что-то твой алгоритм не работает. Записал так
Vector2f vectorA = line.getA().sub(box.getPos());
Vector2f vectorB = line.getB().sub(box.getPos());
Vector2f min_vector = ( vectorA.lengthSquared() < vectorB.lengthSquared() ) ? vectorA : vectorB;
float x = sign( min_vector.x ) * box.getExtents().x;
float y = sign( min_vector.y ) * box.getExtents().y;
return box.getPos().add( box.getDirX().mul(x) ).add( box.getDirY().mul(y) );
Вот 2д проект, если с java знаком, то можешь глянуть. Там сейчас мой алгоритм работает.