求两条直线交点的公式

Formula to find intersection point of two lines

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

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

我可以切换到 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?

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

假设 k1 = tan(alpha1)k2 = tan(alpha2).

那么交点x坐标的公式就是

x = (y2 - y1 + k1 * x1 - k2 * x2) / (k1 - k2)

Note: Function tan is undefined for angles pi / 2 + k * pi (where k is an arbitrary integer), so:

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

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

(两者实际上相同,交换索引 1 <--> 2)。

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