两行之间的重叠检查

时间:2015-10-16 06:16:29

标签: math geometry line intersection

我想检查两条线是否交叉。我知道如何检查两条线之间交叉的算法,但在我的情况下,我有一些不同的问题。为了解释我的问题,我在这附加图像。

enter image description here

用于绘制的数据:

Line - 1:

开始坐标:-121.001525,632.378285

结束坐标:-125.106805,625.773505

半径:1

Line - 2:

开始坐标:-121.116355,632.866595

结束坐标:-133.183055,631.490825

半径:2.5

我如何绘制此图片:

在图像中,您可以看到中心线为黑色。并使用此半径绘制图像轮廓。

现在来到这一点,从视觉上我们可以看到图像相交但线不相交。如果线相交,那么我们可以很容易地发现线是否相交。但在我的情况下,线条不相交,但图像相交,所以如何检查两个图像是否交叉?

有任何建议如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

如果我理解你的问题,你想要检查两个体育场形状(两个半圆盘和一个矩形)的交叉点,它们对应于两个线段的给定距离。

要简化问题,您可以先将R1缩减为零,同时将R2增加到R=R2+R1。然后你需要检查一个线段与体育场形状的交叉点。

旋转并平移所有端点,以便体育场形状的起点和终点到达原点(0, 0)和X轴上的点(L, 0)

设P0和P1为线段的端点。参数方程是

P = (1-u) P0 + u P1,

0≤u≤1

通过评估线性不等式的兼容性来检查与矩形的交点

0≤Px=(1-u)P0x+uP1x≤L, -R≤Py=(1-u)P0y+uP1≤R, 0≤u≤1.

这三个关系确定每个u的包围,并且足以检查三个支架是否兼容。

然后你需要检查两个(半)圆的交点。

对于原点的圆圈,我们必须

Px²+Py²=((1-u)P0x+uP1x)²+((1-u)P0y+uP1)²≤R², 0≤u≤1.

第一个关系是二次方不等式,你可以通过找到根来轻松解决它,并产生u的括号。然后检查两个支架是否兼容。

另一个圆圈的测试非常相似,只需翻译中心。

答案 1 :(得分:1)

通过检查从一个段到另一个段的距离是否小于每个段的组合半径r,可以快速检查由半径r膨胀的两个段是否相交。 因此,在您的情况下,如果从段1到段2的距离小于半径1 +半径2,则形状1与形状2相交。 当然,通过这样做,你不知道他们确实在哪里相互交叉,但你知道他们确实相互交叉。

答案 2 :(得分:0)

很多年迟了,但是以防万一有人遇到同样的问题。

Vega和Lago开发的一种经典的3D球面圆柱体算法。

一种快速算法,用于评估杆之间的最短距离。 C Vega,S Lago-计算机与化学,1994年。 https://doi.org/10.1016/0097-8485(94)80023-5

您可以轻松地找到已经在C和Fortran中实现的算法。缩小为2D很简单。

相关问题