2011-01-22 139 views
3

如果我有斜邊的長度和角度,我如何找到相鄰的和相反的?基於三角形獲取屏幕座標

我正在用JavaScript寫這個,我只是想找到斜邊座標(x/y),其中斜邊在給定長度和角度時結束。 因此,另外,我需要知道如何從笛卡爾座標轉換爲屏幕座標。

對不起,這可能是一個非常愚蠢的問題。

這裏是如果我是不清楚的草圖:

alt text

因此,像這樣:

function getLineEndCoords(originX, originY, hypotenuse, angle){ 
    // Probably something to do with tangents and cosines. 
    return [x,y] 
} 

此外,如果有人知道了這種東西有什麼好的JS庫(等軸測圖,顯示相關數學),這將是方便的。

+0

什麼是originX和originY定義爲?底座是否總是平行於X軸? – marcog 2011-01-22 19:16:36

回答

3

在這裏你去:

function getLineEndCoords(originX, originY, hypotenuse, angle){ 
    return [originX+Math.cos(angle)*hypotenuse,originY-Math.sin(angle)*hypotenuse]; 
    } 

上面的代碼有相對正確的x軸的角度(如在你的草圖)。例如,角度0在時鐘上是數字3。以弧度表示的角度PI/2(90度)將爲12點。該函數還將座標作爲屏幕座標返回,其中Y隨着您下降而增加,而不像在笛卡爾平面上增加。

請注意,javascript三角函數只接受弧度,而不是度數。你的角度參數必須以弧度表示。以下是將度數轉換爲弧度的代碼:

function deg2rad(deg){ 
    return deg*Math.PI/180; 
    } 
+0

非常感謝Joel!我現在正在爲你投票,盡我所能。 – 2011-01-22 23:52:21

4

使用SOH CAH TOA:

sin(A) = o/h 
cos(A) = a/h 
因此

x = hypotenuse*sin(angle) + origionX 
y = hypotenuse*cos(angle) + origionY 

它通常是更容易記憶的一個軸是乘以長度的角度的正弦值,和另一個是角度的餘弦乘以長度。

編輯:

對不起,我忘了包括添加來源。

+0

Hannesh,看起來這樣會使0度直線下降。我認爲這是因爲你的計算正在使用笛卡爾座標,而我正在考慮屏幕座標。 – 2011-01-22 23:18:56