Что вычисляет данная функция?

149
30 октября 2019, 20:50

В общем, имеется 6 float координат в игре: PlayerPos_X, PlayerPos_Z, PlayerPos_Y и еще 3 (я так и не узнал что это) Pos_X, Pos_Z, Pos_Y Суть такова, есть байты данных, которые передаются в игре на сервер, не могу понять за что отвечают вторые три координаты, первые три координаты - это позиция игрока на карте, вторые три координаты по значению очень близки к позиции игрока, но не равны (вторые координаты генерируются во время атаки, в зависимости от направления куда атакуешь в 3D пространстве). Вообще, данные координаты относятся как то к атаке (то-ли смещения взгляда, то ли вектор куда игрок атакует). На сервере есть вот такая функция, собственно, с помощью нее и можем выяснить что за вторые координаты: Pos_X, Pos_Z, Pos_Y:

float res_x = Pos_X - PlayerPos_X;
float res_z = Pos_Z - PlayerPos_Z;
float res_y = Pos_Y - PlayerPos_Y;
float result = atan2f(res_x, res_y) * 57.295776 * 0.5;
if(result < 0.0) 
    result = result + 180.0
int viewoffset = result;

Код примерно такой как указано сверху, одно понятно точно, оно вычисляет смещение взгляда игрока, однако, что в таком случае вторые 3 координаты? Это смещение камеры или что? Разъясните что тут происходит, он исходя из координат игрока на карте и вектора куда атакует игрок получает смещение его взгляда чтобы потом понять находится ли моб в диапазоне viewoffset с разницей в -30 и +30, то есть получается мобы которые попадают в диапазон между этими значениями viewoffset будут задамажены? Правильно ли я всё понял?

Answer 1

z компонента координаты не используется в примере совсем. 57.295776 это 180 деленное на пи.

поэтому, atan2f(res_x, res_y) - вычисляет угол в радианах между двух векторов, умножив на 57.3 получим в градусах. Зачем там умножают на 0.5 - не знаю, может там что то ещё есть. Сама функция atan2f возвращает в диапазоне [-pi, +pi], поэтому там и прибавляют 180, что бы перевести в диапазон от 0 до 360, но из за умножения, получается от нуля до 90 и от 180 до 270. Такой себе крест-накрест. Где там Ваше -30 +30 - не знаю.

Скорее всего - Posx - это координаты его оружия.

READ ALSO
Как определить число букв в массиве?

Как определить число букв в массиве?

Здравствуйте, у меня такая проблемаМне нужно узнать число букв в массиве

134
Класс String. Перегрузка операторов

Класс String. Перегрузка операторов

Помогите найти ошибку в коде

151
Не компилируется GDI+ через cl.exe

Не компилируется GDI+ через cl.exe

Пытаюсь собрать пример скриншота на GDI+ на С++ через clexe Вот пример который я пытаюсь собрать

148