def intersection(A, D, tangA, tangD):
    """returns the intersection parameters of two evens

    they are defined by:
      x(t) = A + t * tangA
      x(s) = D + s * tangD
    """
    det = -tangA[0] * tangD[1] + tangA[1] * tangD[0]
    try:
        1.0 / det
    except ArithmeticError:
        return None, None
    DA = D[0] - A[0], D[1] - A[1]
    t = (-tangD[1] * DA[0] + tangD[0] * DA[1]) / det
    s = (-tangA[1] * DA[0] + tangA[0] * DA[1]) / det
    return t, s
