计算两个向量之间的夹角,返回值为0到360度之间的数值

3

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

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个回答

5
您需要将鼠标的坐标值进行90度旋转(即交换y和x,再取反x和y),并且加上180度的偏移量(即Math.PI)。

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

如果您制作一个表格,列出您拥有的值和期望的值,那么计算将会更加容易。

拥有 -> 期望

-180 -> 270

-90 -> 0

0 -> 90

90 -> 180

180 -> 270

我们可以将其分为两种情况:

[-180,-90)

[-90,180]

情况1

[-180, -90) -> [270, 360)

规则是简单的+450

情况2

[-90, 180] -> [0, 270]

这个只需要+90

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接