计算两条线和两条弧之间的最小距离

Calculate minimum distance between two lines and two arc

我首先有两个问题如何计算两条线之间的最小距离。 有关详细信息,我在此处附上图片。

在图像中描述带有起点和终点的线。我已经有了两条线的起点和终点,但我不知道如何计算两条线之间的最小距离。

另一个问题是如何计算两个圆弧之间的最小距离。 我在这里附上另一张图片

对于圆弧,我有起点、终点和中心点,还有起点和终点角度。

这个 link 还有很多东西 - Shortest distance between a point and a line segment

我也得到了上面的帮助link。

这是我现在面临的另一个问题。在这种情况下如何计算两个弧之间的最小距离?

知道如何解决这两个问题吗?

两条相交线之间的距离为0

否则,您想要的是计算其中一条线到另一条线的端点。 如果你想计算一个点和一条线之间的距离:

It is the length of the line segment which joins the point to the line and is perpendicular to the line.

对于圆弧我认为圆弧是圆的一部分,它们之间的距离是它们的中心点之间的距离减去它们的半径。

也许您可以在这里找到更多信息:Calculate the minimum distance between two given circular arcs

示例

设两个段为AB和CD。它们的参数方程可以写成

P = A + u AB, Q = C + v CD, with u, v in [0, 1].

您想最小化(平方)距离

PQ² = (CA + u AB - v CD)², under the given constraints,

你可以用

取消一阶导数
(CA + u AB - v CD).AB = 0
(CA + u AB - v CD).CD = 0

解析 2x2 系统后,您会得到一对 (u, v)。如果两个变量都落在[0,1]内,则有交集,距离为0.

否则,将uand/orv钳位到范围[0, 1]的相关边界并计算相应的距离。

如果一个变量被钳制,则距离在端点和线段之间;如果两个被夹住,它在两个端点之间。


可以对圆弧采用类似的方法(使用三角函数),并导致线性约束下的优化问题。不过,由于 objective 函数是非线性的,因此不太容易处理。


我们还可以进行如下操作:

  • 找到使整个圆之间的距离最短的点。有两种情况:

    • 圆在两个地方相交

    • 圆不相交;两个圆的交点和中心线之间的距离最短。

  • 然后通过角度比较来判断这些点是否属于圆弧。如果是,则完成(距离为 0 或交叉点之间的距离)。

  • 否则,考虑一个弧的端点相对于另一个圆。最近点是圆与通过该点和圆心的直线的交点。如果交点属于圆弧,保持点到交点的距离。对所有四个组合重复此操作 endpoint/arc 并保留最接近的一对。

  • 如果没有找到有效对,保持最短的endpoint/endpoint距离。

图为可以考虑的距离。绿色,endpoint/circle;红色,endpoint/endpoint。在这种情况下,circle/circle 距离在它们相交时为零。连接圆弧内两点的距离可以考虑。