找到最小距离

时间:2013-02-13 10:59:18

标签: optimization distance geometry curves

我需要在给定的圆(或曲线)上找到一个或多个点,使d0 + d1最小化?曲线的半径和中心分别为(0,0)和'r',点A和B的坐标是已知的。假设A =(x1,y1)并且B =(x1,-y1)并且r> sqrt(x1 ^ 2 + y1 ^ 2)。 C是圆的未知点,应该最小化长度d0 + d1 d0 - 圆上A到C之间的距离 d1-圆圈上B到C之间的距离

C点沿圆圈移动。我需要在给定的圆(或曲线)上找到一个或多个点,使d0 + d1最小化?

2 个答案:

答案 0 :(得分:2)

如果AB线与圆相交,那么C就是那个交点(请注意,可以有两个交点,两者都给出相等的距离d0+d1!)。

line crosses circle

如果AB不与圆相交,则C是圆上与最靠近圆心的AB线上的虚线相交的点。

line does not cross circle

网上有很多关于如何在最接近另一个点的线上找到点的文章,以及如何找到两条线之间的交点,这将解决第二种情况。对于第一种情况,你可以google“line circle intersection”

答案 1 :(得分:0)

一般情况非常复杂,但特殊情况

  

A=(x1,y1)以及B=(x1,-y1)r > sqrt(x1^2+y1^2)

以圆为中心的原点具有足够的对称性,使得解决方案至少在某些情况下是可访问的。我假设A ≠ B,(相当于y1 ≠ 0),否则问题对于一个圆圈来说是微不足道的。

dist(P,Q)为点PQ之间的欧几里德距离。连接AB的(已关闭)线段是点P的基因座

dist(P,A) + dist(P,B) = dist(A,B)

对于D > dist(A,B),带有

的点的轨迹
f(P) = dist(P,A) + dist(P,B) = D

是一个椭圆E(D),其焦点为AB。让P成为圆圈上的一个点D = f(P)

  • 如果圆的切线和点E(D)中的椭圆P不一致,P既不是局部最小值也不是局部最大值{{1}限制在圈子里。
  • 如果切线重合,并且圆的曲率大于fE(D)的曲率,则PP的孤立局部最大值到了圈子。
  • 如果切线重合,并且圆的曲率小于fE(D)的曲率,则PP的孤立局部最小值到了圈子。
  • 如果切线重合且圆的曲率等于fE(D)的曲率,则
    • PP的{​​{1}}被隔离的本地最低点f {/ 1}},
    • dist(P,A) = dist(P,B)既不是本地最大值,也不是P限制在圆圈内的本地最小值。

首先,如果f,很容易看到(如果它不是几何上明显的)圆圈上最小化x1 = 0的点是x坐标f的点,即0P1 = (0,r)。 [如果P2 = (0,-r),那甚至会成真。]

现在,假设r² ≤ x1² + y1²,不失一般性x1 ≠ 0。然后很明显,最小化x1 > 0的圆圈上的点P = (x,y)必须具有f。根据情况的对称性,点x > x1必须是局部最小值或局部最大值R = (r,0)限制在圆圈内。

计算f附近f的行为时,发现R是当地最小值,当且仅当

R

由于r ≥ (x1² + y1²) / x1 R曲率最小的点(以及E(f(R))R中的切线且圆圈重合),因此E(f(R))R全球最低限度。

如果r < (x1² + y1²) / x1,则R是限制在该圈子中的本地最大值f。然后f在圆上有两个全局最小值,具有相同的x坐标。不幸的是,我没有一个很好的公式来计算它们,所以我不能提供比迭代搜索更好的方法。