Java Angle Math: проверьте, насколько близко игрок смотрит на объект

Я программирую плагин Minecraft Bukkit, и мне нужен способ расчета входного числа от 0 до 360 для отображения пользовательского компаса. Таким образом, если игрок смотрит прямо на объект (не должен обрабатывать высоту просмотра или высоту положения), это число будет равно 0, а если игрок спиной смотрит на объект, это будет 180.

Я уже успешно вычислил оба нужных мне числа:

  1. Абсолютный угол обзора игрока. 0, когда игрок смотрит в северном направлении и 180 в южном направлении.

  2. Угол расположения между позицией игрока и позицией объекта. Используя Math.atan2, чтобы получить угол между [X, Z] этих местоположений.

Оба значения, кажется, рассчитаны правильно. Но я не могу понять, что делать, чтобы получить число, которое я описал сначала. Пробовал вычитание, сложение. Есть идеи?


person Aich    schedule 21.02.2014    source источник
comment
Может быть, это вопрос к gamedev.stackexchange.com?   -  person dot_Sp0T    schedule 21.02.2014
comment
Я думаю, что это все еще обычная геометрическая математика, независимо от того, где она будет использоваться. Однако можно ли перемещать вопросы?   -  person Aich    schedule 21.02.2014
comment
Правда что. Хотя я полагаю, что вам может повезти больше, так как это более распространено в игровом контексте.   -  person dot_Sp0T    schedule 21.02.2014


Ответы (1)


Должна быть разница между ними - если игрок смотрит на север, а объект дельта x, дельта z дает азимут 45 градусов, то стрелка должна быть впереди и правее на 45 (=45-0), если игрок смотрит на юг, а объект x,z равен 45, тогда стрелка должна быть позади и левее на 225 или -135 (=45-180).

Убедитесь, что вы преобразовали результат Math.atan2 в градусы, чтобы значения вычитались в одних и тех же единицах, и что соглашения об осях согласованы. Это говорит о том, что +ve по оси x — это восток, а +ve по оси z — это юг. Азимут 0, север задается atan2 (0,1), что означает, что вы должны использовать Math.toDegrees(Math.atan2(deltaX, -deltaZ)) для получения пеленга.

Делая такие вещи, гораздо проще написать полдюжины модульных тестов, которые охватывают случаи и играют со знаками, чтобы увидеть, каковы эффекты.

person Pete Kirkham    schedule 21.02.2014