计算 2 个向量之间的角度 return 值在 0 到 360 度之间

calculate angle between 2 vectors return value in degrees between 0 and 360

嘿,我有以下代码以度数计算角度:

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

但目前我得到的角度介于 0 到 180 度之间。右侧为 0 度,请参见图片。但我希望返回的角度在 0 到 360 度之间,全部为正。顶部为 0 度。见图像。

我如何更新我的功能才能正常工作?我把这个写在 javascript 中。 所以最后我希望角度值作为图像中的粉红色返回。非常感谢任何帮助!!!

希望这很清楚,如果不是请告诉我,以便我更新我的问题。

您需要 "rotate" 您的 mouse.x 和 mouse.y 坐标大约 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>

如果您将已有的值和期望的值制作成图表,这将最容易计算。

有 -> 想要

-180 -> 270

-90 -> 0

0 -> 90

90 -> 180

180 -> 270

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

[-180, -90)

[-90, 180]

案例一

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

规则就是+450

案例二

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

这个就是+90

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

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