求两条直线交点的公式
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]
和 alpha1
和 line 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 = x1
和y = y2 + k2 * (x1 - x2)
如果 k2
是 未定义,则 x = x2
和 y = 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
如何找到 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]
和 alpha1
和 line 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 anglespi / 2 + k * pi
(wherek
is an arbitrary integer), so:
如果k1
是未定义,则x = x1
和y = y2 + k2 * (x1 - x2)
如果 k2
是 未定义,则 x = x2
和 y = 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