我需要在给定的圆(或曲线)上找到一个或多个点,使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最小化?
答案 0 :(得分:2)
如果AB线与圆相交,那么C就是那个交点(请注意,可以有两个交点,两者都给出相等的距离d0+d1
!)。
如果AB不与圆相交,则C是圆上与最靠近圆心的AB线上的虚线相交的点。
网上有很多关于如何在最接近另一个点的线上找到点的文章,以及如何找到两条线之间的交点,这将解决第二种情况。对于第一种情况,你可以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)
为点P
和Q
之间的欧几里德距离。连接A
和B
的(已关闭)线段是点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)
,其焦点为A
和B
。让P
成为圆圈上的一个点D = f(P)
。
E(D)
中的椭圆P
不一致,P
既不是局部最小值也不是局部最大值{{1}限制在圈子里。f
中E(D)
的曲率,则P
是P
的孤立局部最大值到了圈子。f
中E(D)
的曲率,则P
是P
的孤立局部最小值到了圈子。f
中E(D)
的曲率,则
P
是P
的{{1}}被隔离的本地最低点f
{/ 1}},dist(P,A) = dist(P,B)
既不是本地最大值,也不是P
限制在圆圈内的本地最小值。首先,如果f
,很容易看到(如果它不是几何上明显的)圆圈上最小化x1 = 0
的点是x坐标f
的点,即0
和P1 = (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坐标。不幸的是,我没有一个很好的公式来计算它们,所以我不能提供比迭代搜索更好的方法。