我正在尝试根据三角形边计算角度,最好是用sin。
前两个是辅助函数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)
}
}
最后:
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)
}
有人可以告诉我我做错了什么吗?我想以度数计算结果。
更新
我在屏幕上检测到舔,它给了我一个x,y,然后我从cx和cy中减去那些x,y,它们是屏幕的中心
答案 0 :(得分:4)
这称为向量的角度(或方向),从(或到,取决于您需要的)点击到屏幕中心。没有必要计算角度的距离和弧度(而不是你的罪) - 你可以使用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);