def METHOD_NAME(self, point, normal, r):
    b = 2.0*normal.dot(point)
    c = point.magnitude2() - r*r
    q = -0.5*(b + sgn(b)*sqrt(b*b - 4.0*c))
    assert distinctlyGreaterThan(abs(q), 0.0)
    a1 = q
    a2 = c/q
    p1 = (point + a1*normal).unitVector() * r
    p2 = (point + a2*normal).unitVector() * r
    if p1 > p2:
        return p1
    else:
        return p2