两条直线交点公式

3
如何找到线1和线2相交的点,如果两条线都由x、y、alpha定义,其中x、y是线上一点的坐标,alpha是线与x=const之间的角度?
我尝试应用正弦定理,但会得到两个答案(可以在线的两侧建立三角形)。我可以检查哪个点与其中一个点形成正确的斜率,但这很麻烦。
我可以切换到y=ax+b表示,但然后我必须担心特殊情况。垂直和水平线应该有所不同,以避免在1/sin(alpha)和1/cos(alpha)情况下除以零。
我不是在寻找某种语言的实现,只是一个公式。
这些问题并不相关,因为它们涉及有限的线段,而不是线。
2个回答

4
假设line 1[x1,y1]alpha1定义,line 2[x2,y2]alpha2定义。

假设k1 = tan(alpha1)k2 = tan(alpha2)
那么交点的x坐标公式为:
x = (y2 - y1 + k1 * x1 - k2 * x2) / (k1 - k2)

注意:函数tan在角度为 pi / 2 + k * pi(其中k是任意整数)时未定义,因此:
如果k1未定义,则x = x1且y = y2 + k2 * (x1 - x2);
如果k2未定义,则x = x2且y = y1 + k1 * (x2 - x1);
(两者实际上是相同的,只是指数1 <-> 2交换)。

1
有没有办法避免检查if(aplha1!=pi/2)?角度保证不同,但其中一个可能是pi/2,导致tan(pi/2)出现除零错误。 - undefined
非常感谢您对这个特殊情况的警告,我已经扩展了我的答案以包含它。 - undefined

3

对于一条直线的方程式Y = aX + b,你可以计算a = tan(alpha)

因此如果将line1定义为x、y和alpha,方程式为Y = tan(alpha) * X + b

现在要找到b,你需要线上的一个点。该点具有坐标(x, y)。

y = ax + b

b = y - ax

因此,您的线方程为:

Y = tan(alpha) * X + (y - tan(alpha) * x)

现在您只需解决线的方程:

Y = a1 * X + b1

Y = a2 * X + b2

即:

a1 * X + b1 = a2 * X + b2

(a1 - a2) * X = b2 - b1

X = (b2 - b1) / (a1 - a2)

现在你也可以计算Y了。

因此,如果我们替换,我们获得:

X = ((y2 - tan(alpha2) * x2) - (y1 - tan(alpha1) * x1)) / (tan(alpha1) - tan(alpha2)

简化:

X = (y2 - y1 - tan(alpha2) * x2 + tan(alpha1) * x1)) / (tan(alpha1) - tan(alpha2)

然后:

Y = tan(alpha1) * X + (y - tan(alpha1) * x


1
同样的问题适用于垂直线,tan(90) = 无穷大的情况下会怎样? - undefined
你需要在进行数学计算之前进行检查。 - undefined
如果你使用这种方法,那就没有其他选择了(可能还有其他方法不需要进行检查)。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接