Сколько ни писал, всегда считал все в декартовых координатах, полярные никогда не юзал) Хранил угол движения машинки и скорость[UPD: упс, кажется это взаимоисключающие параграфы (: Ну да ладно в любом случае ИМХО лучше думать векторами]. Вектор движения можно получить как

Код:
moveVec = new Vector2(Math.cos(moveAngle)*speed, Math.sin(moveAngle)*speed);
То есть скорость скалярная величина просто.
Направление на цель лучше считать не углом, а нормализованным вектором. Что может сделать машинка? Повернуть с сторону цели направо или налево. Ну или прямо ехать.
Чтоб понять направо поворачивать или налево, что нужно сделать?
Так вот, есть у нас два вектора: dir - куда в данный момент движется машинка(считается так же как moveVec, только без домножения на скорость)
и второй - targetVec - направление на цель.
Если мы их векторно перемножим, то знак компоненты z результата будет указывать на то, влево поворачивать в сторону цели или вправо.
Чтоб получить угол между dir и targetVec, достаточно вспомнить что скалярное произведение нормализованных векторов равно косинусу угла между ними. Так вот если этот угол меньше некоторого заданного значения, машинка пускай едет прямо)
Ну чтоб в бок таранить там надо много подкручивать ИИ методом проб и ошибок.
Для машинок я б вообще порекомендовал или Box2D заюзать или на верлетовой физике сделать. У меня как-то были гоночки на верлете, очень даже ничего вышло.
Удачи!)
PS тормозить или не тормозить - зависит от того как напишешь)