找到两条线的交点的公式

时间:2016-10-30 15:02:21

标签: coordinates intersection

如果两条线都由x,y,alpha定义,如何找到line1和lin2相交的点,其中x,y是一条线上一个点的坐标,alpha是线与x = const之间的角度?

我尝试应用正弦定理,但它产生两个答案(三角形可以在一条线的两边构建)。我可以检查哪个点与其中一个点形成正确的斜率,但这很难看。

我可以切换到y = ax + b表示,但是我有特殊情况我不得不担心。垂直和水平线应该不同,以避免在1 / sin(alpha)和1 / cos(alpha)情况下除以零。

我不是在寻找某种语言的实现,只是一个公式。

这些问题不相关,因为它们涉及有限线段,而不是线。

Given two points and two vectors, find point of intersection
How do you detect where two line segments intersect?

2 个答案:

答案 0 :(得分:2)

假设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 = x1y = y2 + k2 * (x1 - x2)

如果k2 未定义,则x = x2y = y1 + k1 * (x2 - x1)

(两者在交换指数1< - > 2时几乎相同)。

答案 1 :(得分:1)

对于线方程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