【问题标题】:Shortest Distance Between 3 Points Along a Line Segment沿线段 3 点之间的最短距离
【发布时间】:2018-07-06 03:20:26
【问题描述】:

我目前正在研究导航网格的寻路算法。跳过细节,我需要找到一种算法来找到沿线段的三个点之间的最短距离。

从 A 点到 B 点再到 C 点的路径。A 和 C 是 3D 空间中的固定点。 B 是位于线段 DE 上某处的点。 B的什么位置使路径ABC的距离最小?

【问题讨论】:

  • 你能做一些事情,比如在最接近给定点的线上找到点吗?

标签: math 3d line distance


【解决方案1】:

您没有提供任何自己的算法或代码,因此我将仅广义地陈述一种算法。如果您需要更多详细信息,例如数学公式或代码,请向我们展示您在该问题上所做的更多工作,我将很乐意提供更多帮助。

这是一种没有微积分但使用 3D 几何的算法。总体思路是在line DE 上找到最小化路径 A-to-B-to-C 的点 B。如果这一点在segment DE,那就是你的答案。如果点在 D 之外,那么 D 就是你的答案,如果点在 E 之外,那么 E 就是你的答案。

要在 DE 线上找到 B 点,请考虑从 A 点到 DE 线的高度以及从 C 点到 DE 线的高度。现在围绕线 DE 旋转点 C,使新点 C' 与点 A 和线 DE 在同一平面上,但在点 A 的线的另一侧。现在找到线段 AC' 和线 DE 的交点——那里当然是一个。那个交点就是你在 DE 线上的 B 点。

通过对 3D 空间进行刚性变换,将点 D 放置在原点,将点 E 放置在 x 轴正方向,并将点 A 放置在 x 轴上方的上半平面中,所有这一切都会变得更容易。然后您将找到所需的点,然后对 B 点进行逆刚体变换。

你明白吗?我现在无法向您展示该算法的图形,尽管我明天可以制作一个。正如我所说,展示一些你自己的作品,然后我很乐意提供更多细节。


我应该简要提及另外两种方法。微积分方法使用路径长度表达式的导数。这将涉及求解一个只有一个实根的三次多项式方程。计算机方法使用黄金分割算法或类似的方法来近似路径长度表达式的最小值。选择你的毒药。 (这些方法都不是很容易。)

【讨论】:

  • 感谢您的回答。我当前的实现使用二分搜索来尝试逼近 B 的值。虽然这可行,但它在非常大的线段上可能会很慢,并在小密集网格上导致许多小的路径偏移。我现在将尝试实现您的算法。谢谢。
猜你喜欢
  • 1970-01-01
  • 2011-02-18
  • 2015-01-25
  • 2010-10-25
  • 2010-10-12
  • 1970-01-01
  • 2018-07-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多