2011-01-22 26 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