考虑到这里的描述,这实际上并不难:http:
//mathworld.wolfram.com/Circle-CircleIntersection.html
一种建议的算法:
- 查找 x - 如链接中所述。
- 计算 y。
两者都应该使用任意 2 个圆圈来完成。
- 将点 (x,y) 和 (x,-y) 插入 3 圈中。
- 解决方案是所有三个圆在 x,y x,-y 处相交或根本不相交。
另一个建议...我再次阅读了您的问题,并意识到您并不想自己找到重点...
然而,如果你在一张纸上画出所有 9 个圆(3 个相交的圆,加上 r+e 和 re 的 2 个越来越大,其中 e 是错误的),你会注意到以下内容。您的交点位于多边形内。您可以轻松计算此多边形的顶点。然后你的问题就变成了:在多边形中找到一个点。或者您编写一个查找这些顶点的反对函数,然后最小化该区域。
要了解我对圆圈的含义,请运行:
# excuse me for the ugly code ...
import pylab
pylab.axes()
cir = pylab.Circle((1,0), radius=1, alpha =.2, fc='b')
cir1 = pylab.Circle((1,0), radius=0.9, alpha =.2, fc='b')
cir2 = pylab.Circle((1,0), radius=1.1, alpha =.2, fc='b')
cir3 = pylab.Circle((-1,0), radius=1, alpha =.2, fc='b')
cir4 = pylab.Circle((-1,0), radius=0.9, alpha =.2, fc='b')
cir5 = pylab.Circle((-1,0), radius=1.1, alpha =.2, fc='b')
cir6 = pylab.Circle((0,-1), radius=0.9, alpha =.2, fc='b')
cir7 = pylab.Circle((0,-1), radius=1.1, alpha =.2, fc='b')
cir8 = pylab.Circle((0,-1), radius=1, alpha =.2, fc='b')
pylab.gca().add_patch(cir)
pylab.gca().add_patch(cir1)
pylab.gca().add_patch(cir2)
pylab.gca().add_patch(cir3)
pylab.gca().add_patch(cir4)
pylab.gca().add_patch(cir5)
pylab.gca().add_patch(cir6)
pylab.gca().add_patch(cir7)
pylab.gca().add_patch(cir8)
pylab.axis('scaled')
pylab.show()