Работая с box2d и cocos2d, я вычислил два вектора:
- один - вектор, указывающий направление движения автомобиля. (от центра автомобиля до его северной точки).
- два - вектор, указывающий в направлении цели. (от центра к транспортному средству к целевому центру.)
Мне нужно повернуть автомобиль, чтобы он также указывал в направлении цели. Это можно сделать, установив рулевое управление автомобиля на 90 градусов для поворота вправо или -90 для поворота влево.
В данный момент я запрашиваю у кузова box2d кузова для его угла, а затем вычисляю угол вектора направления цели, используя:
if(vector.y == 0){ vector.y = 0.000001f; }
float baseRadians = atan(vector.x/vector.y);
if(vector.y < 0){ baseRadians += PI_CONSTANT; } //Adjust for -Y
return -1 * baseRadians;
Следующее является грубым, и где мне нужна помощь ...!
Затем я сравниваю угол транспортного средства с углом, возвращенным из вектора направления, и устанавливаю рулевое управление следующим образом:
if(vehicleAngle < targetAngle)
{
steeringInput = -90.0;
}
else if(vehicleAngle > targetAngle)
{
steeringInput = 90.0;
}
else
{
steeringInput = 0.0;
}
Проблема в два раза:
- Угол наклона цели прыгает с -4,71 до 1,57 радиана, в результате чего автомобиль переключается в неправильном направлении
- Угол транспортного средства является непрерывным и продолжает увеличиваться, а не оставаться в пределах диапазона.
Есть ли способ получить целевой вектор и угол транспортного средства в заданном диапазоне, где, например, если целевой угол составляет 0-360, а угол фургона 0-360, я могу затем точно сравнить их?
Есть ли другой способ сделать это ...? Любая помощь приветствуется!