如果两条线都由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?
答案 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 = x1
和y = y2 + k2 * (x1 - x2)
如果k2
未定义,则x = x2
和y = 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