Своего почти добился :о)

Код AS3:
private function updateBody():void
{
if(!_lastPoint) //Если нет точки, куда лететь
return;
_body.SetAwake(true);
//Вектор от центра самолетика до нужной точки
var pointVec:b2Vec2 = b2Vec2.Make(_lastPoint.x - _body.GetPosition().x, _lastPoint.y - _body.GetPosition().y);
//Угол между осью X и pointVec
var pointAngle:Number = getAngle( _body.GetPosition().x, _body.GetPosition().y, _lastPoint.x, _lastPoint.y, true);
//Угол поворота самолета
var bodyAngle:Number = _body.GetAngle();
//Вектор движения cамолетика
var vec:b2Vec2 = b2Vec2.Make(_speed * Math.cos(bodyAngle), _speed * Math.sin(bodyAngle));
trace(toDegrees(pointAngle).toPrecision(5), toDegrees(bodyAngle).toPrecision(5), toDegrees(pointAngle-bodyAngle).toPrecision(5));
var sign:int = 1;
//Если самолетик не "смотрит" на точку, то поворачиваем его на _angleStep (pointVec и vec не сонаправленны)
if(Math.abs(pointAngle-bodyAngle) > _angleStep)
bodyAngle += _angleStep * sign;
else
{
//Доворачиваем самолетик
bodyAngle = pointAngle;
//TODO calc distance
//_lastPoint = null;
}
redraw();
_body.SetAngle(normAngle(bodyAngle));
_body.SetLinearVelocity(vec);
}
Проблема осталась только в sign, не могу придумать, как правильно менять знак, что бы самолет правильно поворачивал, сейчас если следующая точка, расположена против часовой стрелки от предыдущей, то самолет разворачивается по большой дуге.
Вот, что получилось
Исходник
Добавлено через 16 минут
[IMG]http://dl.************/u/6132064/plane_angle2.png[/IMG]
Вот картинка, как работает, сравните с предыдущей :о))