Sas*_*dar 2 javascript math geometry trigonometry angle
我正在尝试根据三角形边计算角度,最好是用 sin 计算。前 2 个是辅助getDistance函数getPointsDifference
我有这些功能:
var getDistance = function(p1, p2){
var dx = p1.x - p2.x, dy = p1.y - p2.y;
return Math.sqrt(dx*dx + dy*dy);
}
var getPointsDifference = function(p1, p2){
return {
x: -1 * (p1.x - p2.x),
y: (p1.y - p2.y)
}
}
Run Code Online (Sandbox Code Playgroud)
最后:
var getMenuChoice = function(cx,cy, x, y){
var distance = getDistance({x:cx,y:cy}, {x:x,y:y});
if (distance <= 100) {
console.log(1)
} else {
console.log(2)
}
var diff = getPointsDifference({x:cx,y:cy}, {x:x,y:y});
var a = Math.sin(diff.y/distance)
console.log("asdf:", a)
}
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我我做错了什么吗?我想以度为单位计算结果。
更新
我检测到屏幕上有一个舔,它给了我 ax,y,然后我从屏幕中心的 cx 和 cy 中减去那些 x,y
这称为从(或到,取决于您需要的)点击点到屏幕中心的矢量角度(或方向)。不需要计算角度的距离和反正弦(而不是你的正弦) - 你可以只使用Math.atan2(dy, dx);。
dy是 y (y2 - y1) 的变化,dx是这两点之间 x (x2 - x1) 的变化。您可以使用常规Math.atan(dy / dx),但必须确保您没有除以零,并且必须考虑 dy 和 dx 的符号才能在正确的象限中得到答案。Math.atan2将为您做这一切。下面的图片只是一个提醒。

是的,答案将以弧度为单位,正如评论中提到的那样。转换很简单degrees = radians * (180 / Math.PI);