找到两个段的交点

时间:2017-04-28 16:56:02

标签: algorithm math geometry graph-algorithm

我有两个相交的A和B(每个由两个点定义)。 X点是A和B的交点。 我怎样才能找到X的坐标?

2 个答案:

答案 0 :(得分:1)

我假设你在两个方面工作。我们来介绍一些符号。让第一个线段由点

定义
  

P 1 =(x 1 ,y 1

  

P 2 =(x 2 ,y 2 )。

第二个线段由点

定义
  

P 3 =(x 3 ,y 3

  

P 4 =(x 4 ,y 4 )。

第一个线段上的任何点都可以用参数表达式

表示
  

s P 1 +(1 - s )P 2

其中 s 是介于0和1之间的实数。同样,第二行上的任何点都可以类似地表示为

  

t P 3 +(1 - t )P 4

交点是这两个表达式相等的地方:

  

s P 1 +(1 - s )P 2 = t P 3 +(1 - t )P 4

将其减少到x和y坐标会产生两个未知数的方程, s t 。求解 s 和/或 t 然后通过替换回原始方程来产生交点。

请注意,使用这样的参数线表示(与计算斜率截距形式的方法不同)即使其中一个线段恰好具有无限斜率也是有效的。

另外,作为一个额外的好处,如果 s t 最终超出范围[0,1],那么两行段< / em>不相交(包含段的行与一个或两个段之外的某个位置相交)。最后,如果两个联立方程没有解,则包含两个段的线是平行的。 (它们甚至可能在同一条线上。区分这种情况,包括区段是在端点处相遇还是部分或完全重叠,都留给读者练习。:))

答案 1 :(得分:1)

说段A上的两点是(x1, y1)(x2, y2)。这两点足以确定直线的等式:

y - y1 = slope.(x - x1) 
where slope is = (y2-y1)/(x2-x1)

因此,使用此技巧,您可以找到A和B段的方程式。对于每个段,它们的形式为y = p_A + q_A x and y = p_B + q_B x

两个段相交的点(x*, y*)y* = p_A + q_A x*y* = p_B + q_Bx*,因此p_A + q_A x* = p_B + q_B x*。在这里,您的值为x*,,您可以通过在任何细分中替换此x的值来找到y*。方程。

希望这有帮助!