1

我正在使用sylvester.js作为数学框架,但似乎忘记了几何(可能),或者没有正确使用它。我正在努力:

var angle = 45;
var line1 = $L([1,1],[Math.tan(angle * Math.PI/180),Math.tan(angle * Math.PI/180)]); //Should be a 45-degree angle
angle = -45;
var line2 = $L([0,0],[Math.tan(angle * Math.PI/180),Math.tan(angle * Math.PI/180)]); //Should be a -45-degree angle
line1.intersects(line2);
//returns false, should be true, I would think?

这应该在 -45 度处创建一条通过 0,0 的线,并在 45 度处创建一条通过 1,1 的线相交,对吧?有什么建议么?(注意:我通常使用 deg2rad var 而不是 Math.PI/180,这纯粹是为了举例)

4

3 回答 3

2

回想一下,角的切线等于另一条腿在相邻腿上的长度。换句话说,超越运行。因此,切线为您提供直线的斜率,而不是沿直线的矢量。

在此处输入图像描述

要将角度转换为矢量,请使用正弦和余弦:

m⃑ = [cos(θ), sin(θ)]

您可以在从极坐标转换为笛卡尔坐标的公式中看到这一点:

(x, y) = (r * cos(θ), r * sin(θ))

由于幅度无关紧要(即使您有幅度,也会$L对向量进行归一化),将“r”排除在等式之外,您就会得到上面m⃑的等式。

请注意,对于代码中的每个方向向量,两个分量相等,因此向量位于 y=x; 线上。因此它们是平行的。您还可以显示向量是平行的,因为向量是彼此的标量倍数。更具体地说,由于向量具有相反的方向(标量为负),因此它们是反平行的。参考点 (0,0) 和 (1,1) 位于两条线上,因此每个向量跨越的线重叠。Sylvester.jsLine.intersects仅在存在唯一交点时才返回 true。由于两条线处处相交,因此没有唯一点,函数返回 false。

于 2012-07-25T21:11:31.033 回答
1

要从某个角度定义矢量,您需要进行以下计算。

x = sin(angle)
y = cos(angle)

你已经这样做了:

x = tan(angle)
y = tan(angle)
于 2012-07-25T21:07:43.140 回答
0

这只是一个猜测,因为我没有对 sylvester 做过很多,但由于 line 是 vector 的一个特殊实例,你的问题可能在于事物的定义方式。当您定义 line2 并将其锚定在 [0,0] 时,第二个点是 [-.013, -.013],line2 可能会朝错误的方向发射,从而与另一条线相交;我不确定这条线是否会双向延伸。

于 2012-07-25T21:04:34.813 回答