2014-10-27 127 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);