ここの説明を考えると、これは実際にはそれほど難しいことではありません:
http://mathworld.wolfram.com/Circle-CircleIntersection.html
提案されたアルゴリズム:
- リンクで説明されているように、 x - を見つけます。
- y を計算します。
どちらも任意の 2 つの円を使用して実行する必要があります。
- 点 (x,y) と (x,-y) を 3 つの円に差し込みます。
- 解決策は、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()