Как проверить, находится ли vector3 внутри куба, который вращается вокруг определенной точки - PullRequest
2 голосов
/ 18 июня 2019

Я работаю над игрой и обладаю следующей информацией

Положение игрока - Vector3
Вращение игрока - float (Radiant)
Местоположение врага - Vector3
Поле атаки игрока - длина,ширина, высота

Что мне нужно сделать, это проверить, находится ли местоположение врага внутри поля атаки игрока.Я знаю, что каким-то образом мне нужно будет либо повернуть окно атаки вокруг игрока, либо повернуть вражеское местоположение вокруг игрока, а затем проверить его.Вращение только слева направо не вверх и вниз.Вот почему это единственное значение Radiant.

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

1 Ответ

2 голосов
/ 19 июня 2019

Насколько я понимаю, достаточно определить, находится ли враг внутри вращающегося (вокруг оси z) параллелепипеда с центром в игроке

Мы можем преобразовать координаты противника в систему координат игрока.Чтобы выполнить эту задачу, мы должны сделать перевод (чтобы указать положение игрока в начале координат), а затем сделать поворот на обратный угол

newEnemyX = (enemy.x - player.x) * Cos(P_Rotation) + (enemy.y - player.y) * Sin(P_Rotation)
newEnemyY = -(enemy.x - player.x) * Sin(P_Rotation) + (enemy.y - player.y) * Cos(P_Rotation)
newEnemyZ = enemy.z - player.z

Теперь сравните (я предполагаю, что длина-ширина-высота соответствуют x, y, z)

 -length/2 <= newEnemyX <= length/2
 -width/2 <= newEnemyY <= width/2
 -height/2 <= newEnemyZ <= height/2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...