计算 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;
}
}
嘿,我有以下代码以度数计算角度:
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;
}
}