在平面上找到最佳拟合点的算法

Algorithm to find best fitting point on a plane

我正在为我的游戏开发一个使用 A* 的寻路系统,我需要以这样的方式定位节点,使它们与其他点的距离最小。

我想知道是否有一种算法可以让我在尽可能靠近指定位置的平面或直线(相邻点之间)上找到最佳拟合点,同时保持相邻点之间的最小距离。

基本上我需要一个给定输入(伪代码)的算法 min distance = 2, original position = 1, 1 和一组现有的点可以做到这一点:

示例中的形状是三角形,可以使用毕达哥拉斯定理计算点,但我需要它适用于任何形状。

你的问题似乎并不容易。如果绘制“禁区”,它们将形成一个由圆盘并集构成的复杂几何体。

有两种情况:

  • 如果新点属于允许的区域,你就完成了;

  • 否则你需要找到最近的允许点。

通过计算所有距离很容易看出一个点是否被允许。但是找到最近的允许点似乎更具挑战性。 (顺便说一句,这一点可能很远。) 如果目标点位于圆内,则最近的候选位置可能是圆上的正交投影,或者两个圆的交点。计算所有这些点并检查它们是否被允许。然后保留最近的候选人。

红色,允许的候选人。黑色的被禁止的候选人。

对于N个点,这是一个O(N³)的过程。这可能可以通过计算几何技术减少 N 倍,但代价是高复杂性。