如果路径预先已知为ABCD,只有确切的点未知,则总距离(平方)可以写成4个变量的函数。
当然,点i的一个参数化是:
x(t_i) = x0_i + r_i * cos(t_i)
y(t_i) = y0_i + r_i * sin(t_i)
路径长度的平方为
D^2 = sum_{i = 1, n-1} (x(t_{i+i}) - x(t_i))^2 + (y(t_{i+i}) - y(t_i))^2
你需要解决的四个变量是t_1, ... t_4。代入后,对于D^2的最终表达式是一个相当复杂的正弦和余弦二次方程。你要尽量使该数量最小。
这不太可能有一个解析解。
你还可以尝试有理二次圆形参数化,但你最终会得到一个有理四次方程。不会更简单(吧)。
令人高兴的是,即使是这种复杂的函数也可以通过标准的数值非线性优化算法进行最小化,例如(评论中有人建议的)梯度下降。
在一般情况下,你无法保证由此类算法找到的最小值是全局的。但在这种情况下,解空间似乎是凸的,至少对于大多数问题实例来说,这使得局部最小值也是全局最小值。
还有可能存在很好的启发式方法来选择数值迭代的起始点。例如,沿着圆的
中心路径。对于每个圆,选择其与路径相交的两个点之间的中点。
通过类似的逻辑,你可以约束每个t_i的值都小于\pi的一个范围。