2014-10-27 86 views
1

我正在尝试计算基于三角形边的角度,最好是使用sin。 第2辅助功能getDistancegetPointsDifference使用sin或cos计算三角形的角度

我有以下功能:

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) 
    } 
} 

和finaly:

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) 

} 

可能有人请告诉我我究竟做错了什么?我想用度来计算结果。

更新

我发现它可以给我斧子,Y在屏幕上一舔,然后我减去那些X,Y从CX和CY这是屏幕的中心

+0

你如何定义三角形?通过它的顶点? – Cheery 2014-10-27 16:29:14

+0

检查更新的问题 – Syd 2014-10-27 16:31:21

+0

你的代码中没有三角形,只有两个点,一个三角形包含三个点... – Teemu 2014-10-27 16:31:57

回答

3

这是称为从(或到,取决于你需要什么)向量的向量的角度(或方向)点到屏幕的中心。没有必要计算角度的距离和弧度(而不是你的罪) - 你可以使用Math.atan2(dy, dx);

dy是y(y2 - y1)的变化,dx是x(x2 - x1)在这两个点之间的变化。你可以使用常规的Math.atan(dy/dx),但是你必须确定你没有被零除,并且必须考虑dy和dx的符号才能在正确的象限中得到答案。 Math.atan2将为您做到这一切。下面的图片只是一个提醒。

enter image description here

是的,答案是弧度,因为它是在评论中提到。转换很简单degrees = radians * (180/Math.PI);