2016-02-08 12 views
2

У меня есть эта простая функция для set угол для вектора. Он эффективно получает текущую величину (длину) вектора, калибрует угол и преобразует угол от радианов в градусы. Затем я применяю угол к X и Y, и, наконец, умножая вектор на его исходную величину.Получение угла от вектора направления?

this.setAngle = function(degree){ 
    var l = this.length(); //magnitude of vector 
    var angle = degree*Math.PI/180; //degress converted to radians 
    this.x=Math.cos(angle); 
    this.y=Math.sin(angle); 
    this.multiply(l); //original magnitude 
    return; 
} 

Однако я не уверен, как получить (получить) угол от вектора. Ниже приводится моя попытка:

this.getAngle = function(){ 
    var angle = Math.atan(this.y/this.x); //radians 
    var degrees = angle/(180*Math.PI); //degrees 
    return Math.floor(degrees); //round number, avoid decimal fragments 
} 

Эта попытка не возвращает никакого значения, кроме 0 или -1.

Любые предложения?

Edit:

Правильный метод:

this.getAngle = function(){ 
    var angle = Math.atan2(this.y, this.x); 
    var degrees = 180*angle/Math.PI; 
    return (360+Math.round(degrees))%360; 
} 

ответ

4
this.getAngle = function(){ 
    var angle = Math.atan2(this.y, this.x); //radians 
    // you need to devide by PI, and MULTIPLY by 180: 
    var degrees = 180*angle/Math.PI; //degrees 
    return (360+Math.round(degrees))%360; //round number, avoid decimal fragments 
} 
+0

Это делает возвращает точный угол, я нахожу, однако, что она ограничена в 4 devisions 90 градусов? Чтобы уточнить: если реальный угол составляет 90 градусов, он вернется на 90 градусов, но если реальный угол равен 95 градусам, он вернет -85 градусов? – TheMintyMate

+0

вы можете 'return (360 + Math.round (degrees))% 360' – Gavriel

+0

Я считаю, что это работает, только он не выравнивается с 0 градусами, используемыми при настройке угла? Изображение консоли: [link] (http://i.imgur.com/zaao7jE.png?1) – TheMintyMate

 Смежные вопросы

  • Нет связанных вопросов^_^