2014-10-27 5 views
1

Я пытаюсь вычислить угол, основанный на сторонах треугольника, предпочтительно с sin. Первые 2 являются вспомогательными функциями getDistance и getPointsDifferenceРассчитать угол треугольника с 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) 
    } 
} 

и, наконец:

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) 

} 

Может кто-то пожалуйста, покажите мне, что я делаю неправильно? Я хотел бы вычислить результат в градусах.

обновление

я обнаруживаю облизывание на экране, который дает мне топор, у, а потом вычесть те х, у из сх и су, которые являются центром экрана

+0

Как вы определяете треугольник? По его вершинам? – Cheery

+0

проверить обновленный вопрос – Syd

+0

В вашем коде нет треугольника, только две точки, треугольник содержит три точки ... – Teemu

ответ

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