计算2个向量之间的角度,以0到360之间的度数返回值

时间:2017-06-05 11:47:34

标签: javascript vector angle degrees

嘿,我有以下代码以度为单位计算角度:

var angleDeg = Math.atan2(mouse.y - base.y, mouse.x - base.x) * 180 / Math.PI;
console.log(angleDeg);

但此刻我得到0到180度之间的正负角度。在右边看0度看图像。但我希望返回的角度在0到360之间都是正的。顶部0度。看图像。

enter image description here

如何更新我的功能以便这样做?我用javascript写这个。 所以最后我想要将角度值作为图像中的粉红色返回。非常感谢任何帮助!!!

希望这是明确的,如果不是请让我知道,所以我可以更新我的问题。

2 个答案:

答案 0 :(得分:3)

你需要“旋转”你的mouse.x和mouse.y坐标大约90°(=交换y,x和-x,y)并添加180°的偏移(= Math.PI):< / p>

let base = {x: 100, y: 100};

document.addEventListener('mousemove', event => {
  let angle = Math.PI + Math.atan2(-event.x + base.x, event.y - base.y);
  console.log(angle * 180 / Math.PI);
});
<div style="position: absolute; top: 100px; left: 100px">x</div>

答案 1 :(得分:1)

如果您制作一个包含您所拥有的值和您所期望的值的图表,这是最容易计算的。

有 - >想

-180 - &gt; 270

-90 - &gt; 0

0 - &gt; 90

90 - &gt; 180

180 - &gt; 270

我们看到这可以分为两种情况:

[ - 180,-90)

[ - 90,180]

案例1

[ - 180,-90) - &gt; [270,360]

规则只是+450

案例2

[ - 90,180] - &gt; [0,270]

这只是+90

所以我们得到了我们的代码

sanitize(angle){ // expecting angle within [-180, 180]
    if(angle < -90){
        return angle + 450;
    } else {
        return angle + 90;
    }
}