Javascript 与SylvesterJS的线路交叉点-我的数学有问题吗?

Javascript 与SylvesterJS的线路交叉点-我的数学有问题吗?,javascript,math,geometry,lines,Javascript,Math,Geometry,Lines,我使用的是一个数学框架,但似乎忘记了几何(可能),或者没有正确使用它。我正在努力: 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(ang

我使用的是一个数学框架,但似乎忘记了几何(可能),或者没有正确使用它。我正在努力:

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变量而不是Math.PI/180,这纯粹是为了举例)

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

要从角度定义向量,需要进行以下计算

x = sin(angle)
y = cos(angle)
你已经做到了:

x = tan(angle)
y = tan(angle)

回想一下,角度的切线等于相邻支腿上相对支腿的长度。换言之,上升超过运行。因此,切线给出的是直线的斜率,而不是直线上的向量

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

m⃑ = [cos(θ), sin(θ)] M⃑ = [cos(θ),sin(θ)] 在从极坐标转换为笛卡尔坐标的公式中可以看到:

(x, y) = (r * cos(θ), r * sin(θ)) (x,y)=(r*cos(θ),r*sin(θ)) 因为大小无关紧要(即使你有一个大小,
$L
将向量标准化),所以把“r”从方程中去掉,你就得到了m的方程⃑ 上面


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

Sylvester中的线与数学中的线一样,是无限的。如果跳过复杂的角度部分,是否有效?第1行=([1,1],[0,2]),第2行=([0,0],[1,1])?非常感谢,奥蒂斯!现在这是有道理的。我知道sin和cos被用来得到x,y,但我没有意识到它们也会被用来构建向量。当我更新代码使用sin,cos时,返回true。现在,当我检查Chrome调试器中的元素时,我也看到了它们如何具有相同的组件,从而始终是并行的。谢谢如果我有一个点和一个角度,在Sylvester中有没有一种方法可以很容易地指定它?这是我最初的目标。。而且我似乎很难做到恰到好处。我试过:$L([x,y],[x+(Math.cos(ang)),y+(Math.sin(ang))),但这似乎对我不起作用。@JayCrossler:除了要求澄清之外,评论不应该用来问其他问题。首先,一个问题不需要阅读评论就可以理解。另一方面,问答网站也是如此,而不是论坛,评论也不适合讨论。如果您有问题中尚未描述的其他要求,请编辑问题,而不是发表评论。。。。如果您的问题超出了最初提出的问题(看起来是这样),请在发布新问题之前先检查该问题是否已被提出。在这种情况下,您还应该先阅读文档。另外,仔细看看我的答案。它已经描述了你似乎想要什么。