Как определить угол на основе x & y - PullRequest
0 голосов
/ 09 ноября 2019

Я пытаюсь определить направление скорости объекта в Phaser 3 & Matter JS. В основном я его вылизал, но есть 1 семейство значений, где формула не работает, и это заставляет меня поверить, что я не на своем месте.

У меня есть компоненты x & y объектаскорость, где вверх и влево отрицательны, вниз и вправо положительны (Phaser 3 & MatterJS)

Итак, формула, которую я получил сейчас, с учетом известных Vx и Vy:

angle = Math.atan2(Vy,Vx) + Math.PI/2

Добавление Math.PI/2 в основном поворачивает результат на 1/4 окружности против часовой стрелки, так как atan2() дает число от горизонтальной оси.

Это работает, в основном,:

| Vx | Vy | Direction | Angle       |
|----|----|-----------|-------------|
|  0 | -1 | N         |   0         |
|  1 | -1 | NE        |   Pi * 1/4  |
|  1 |  0 | E         |   Pi * 2/4  |
|  1 |  1 | SE        |   Pi * 3/4  |
|  0 |  1 | S         |   Pi * 4/4  |
| -1 |  1 | SW        |   Pi * 5/4  |
| -1 |  0 | W         |   Pi * 6/4  |
| -1 | -1 | NW        | -(Pi * 1/4) |

Что за последняя строка? Является ли северо-западный квадрант особым случаем, для которого требуется эта формула?

angle = 2*Math.PI + Math.atan2(-1,-1) + Math.PI/2;
angle = 5*Math.PI/2 + Math.atan2(-1,-1);// reduced formula
...