Определить направление вектора движения от скорости

Я как бы смущен этим.

У меня есть объект, и я знаю, что это скорости по осям x и y. Моя проблема в том, как определить угол, под которым он движется.

function Object(){
    this.velocity = {x: 5, y:1};
}

По сути, я знаю, что направление вектора - это x_projection*cos(deg) + y_projection*sin(deg), но я не знаю, как получить эти проекции, поскольку у меня есть только скорость, как я сказал, что я действительно сбит с толку.

РЕДАКТИРОВАТЬ:

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

var addDeg = 0;
if(obj.velocity.x<0)
    addDeg = obj.velocity.y>=0 ? 180 : 270;
else if(obj.velocity.y<=0) addDeg = 360;

deg = Math.abs(Math.abs(Math.atan(obj.velocity.y/obj.velocity.x)*180/Math.PI)-addDeg)

3 ответа

Решение

Я не знаю, как получить эти прогнозы, так как у меня есть только скорость

На самом деле, кажется, что вам не хватает того, что у вас уже есть прогнозы. Вот что такое х и у.

х скорость * cos(угол)

у скорость * грех (угол)

Таким образом, y/x = sin(угол)/cos(угол), который является tan (угол), так что угол =arctan(y/x).

Это угол, вращающийся против часовой стрелки, начиная с оси x (где x направлен вправо, а y направлен вверх).

Найдите угол между этим вектором и (1,0) (правое горизонтальное положительное направление).

Математика это:

A = (5,1) B = (1,0)

AB = | A || B | cos (угол) -> angle = arccos((|A||B|)/(AB))

Точечный продукт, проверьте геометрическое определение

Редактировать:

Другой вариант - использовать формулу кросс-произведения:

| AxB | = | A || B | sin (угол) -> angle = arcsin((|A||B|)/(|AxB|))

Это даст вам угол, который вам нужен.

Есть более простой способ получить полный 360 градусов. То, что вы ищете, это Math.atan2:

deg = Math.atan2(obj.velocity.y,obj.velocity.x)*180/Math.PI;
Другие вопросы по тегам