2016-10-30 47 views
2

如何找到line1和lin2相交的点,如果两条线均由x,y,alpha定义,其中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

假设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) 

注:功能tan是未定义角度pi/2 + k * pi(其中k为任意的整数),所以:

if​​is undefined,then x = x1 and y = y2 + k2 * (x1 - x2)

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

(两者实际上具有索引1 <的交换是相同的 - > 2)。

+1

有没有一种方法,以避免检查对于'如果(aplha1!= pi/2之间)'?角度保证不同,但其中一个可能是pi/2,导致tan(pi/2)的div_zero错误。 – Stepan

+0

感谢您对这个特殊情况的警告,我将我的答案扩展到包含它。 – MarianD

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)

现在你可以计算ÿ过。

因此,如果我们更换,我们得到:

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)=无穷大? – Stepan

+0

你需要在做数学之前检查它。 – Ludonope

+0

如果你使用这种方法,你没有别的办法(也许有其他的方法,你不需要检查它) – Ludonope