Отзывчивый поворот Robocode

Я пытаюсь сделать робота для робокода, который всегда поворачивается перпендикулярно, когда видит робота.

Если вы не знаете, что такое робокод, просто представьте себе игру сверху вниз, где направление записывается в градусах.

Я уже сделал уравнение, которое делает то, что я хочу, но оно очень неэффективно.

(e.getHeading — это направление, в котором смотрит цель, getHeading — это направление, в котором я смотрю, обратите внимание, что также есть метод getBearing, который показывает угол относительно врага)

turnRight( (e.getHeading() + 90) - getHeading());

Проблема, однако, в том, что иногда он идет по длинному пути, а не по кратчайшему. Какое лучшее уравнение я мог бы использовать, чтобы всегда поворачивать правильно?


person Hash    schedule 22.05.2017    source источник


Ответы (2)


Вам нужно будет нормализовать результат

degdiff = (e.getHeading() + 90) - getHeading()

чтобы он был в диапазоне -180..180. Это либо

if(degdiff >  180) degdiff -=360;
if(degdiff < -180) degdiff +=360;

or

degdiff = (degdiff%360 + 540)%360 -180

а потом

turnRight(degdiff)
person Lutz Lehmann    schedule 22.05.2017

Вы можете использовать

setTurnRightRadians(normalRelativeAngle(e.getBearingRadians() + Math.PI / 2))

e.getHeading() - курс врага.

person Dsekercioglu    schedule 07.10.2017