Talk:Circles of given radius through two points
More special cases
There may be more special cases. If p1==p2 and r==0, there is one unique answere that's a zero radius circle. If tow points are separated by exactly double the radius, there's only one answer. The latter can be treated as two identical circles, but then so can the former. <lang python>def find_center(p1, p2, r):
if p1 == p2: if r == 0: return [p1] # special special case # maybe we can return a generator that yields random circles, eh? raise ValueError("infinite many answers")
(x1,y1), (x2,y2) = p1, p2 x, y = (x1 + x2)/2.0, (y1 + y2)/2.0 dx, dy = x1 - x, y1 - y a = r*r / (dx*dx + dy*dy) - 1
if not a: return [(x0, y0)] if a < 0: return [] return [(x + a*dy, y - a*dx), (x - a*dy, y + a*dx)]
print find_center((0, 0), (1, 1), 1) # normal case print find_center((0, 0), (0, 0), 0) # special case 1 print find_center((0, 0), (0, 2), 1) # special case 2</lang>