import math

def distance(a,b):
    x1, y1 = a
    x2, y2 = b

    return(math.sqrt(((x2-x1)**2) + ((y2-y1)**2)))



def bestFitIntersection(a,b,a_rad,b_rad):
    ax,ay = a
    bx, by = b
    dx, dy = (bx-ax,by-ay)
    dist_centers = distance(a,b)
    dx /= dist_centers
    dy /= dist_centers
    c1 = (ax + dx * a_rad, ay + dy *a_rad)
    c2 = (bx + dx * b_rad, by + dy *b_rad)
    dist = distance(c1,c2) 
    ratio = dist * a_rad/(a_rad+b_rad)
    if a_rad < b_rad:
        midX = (c1[0] + dx*ratio)
        midY = (c1[1] + dy*ratio)
    else:
       midX = (c2[0] + dx*ratio)
       midY = (c2[1] + dy*ratio)

    dx_flip = dy
    dy_flip = dx
      
    return((midX, midY), ( midX + dx_flip, midY +dy_flip))



print(bestFitIntersection((0,0),(100,0),180,40), "??")
print(bestFitIntersection((0, 0), (100, 0), 180, 40), "??")
print(bestFitIntersection((0, 0), (50, 87), 60, 78), "??")
print(bestFitIntersection((100, 0), (50, 87), 70, 78), "??")
print(bestFitIntersection((0, 0), (8, 6), 5, 5), "?", (4.0, 3.0))
print(bestFitIntersection((0, 0), (12, 9), 10, 5), "?", (8.0, 6.0))
print(bestFitIntersection((-20, -20), (-30, 20), 10, 10), "?", (-25.0, 0.0j))
print(bestFitIntersection((-30, 20), (-20, -20), 10, 10), "?", (-25.0, 0.0j))
print(bestFitIntersection((0, 0), (0, 0), 12, 24), "?", (16.0, 0.0))
print(bestFitIntersection((0, 0), (0, 0), 24, 12), "?", (16.0, 0.0))
print(bestFitIntersection((0, 0), (0, 0), 10, 10), "?", (5.0, 0.0))
print(bestFitIntersection((0, 0), (0, 0), 0, 0), "?", (0.0, 0.0))
print(bestFitIntersection((0, 0), (2, 0), 0, 0), "?", (1.0, 0.0))
print(bestFitIntersection((0, 0), (2, 0), 1, 0), "?", (2.0, 0.0))
