Algoritmo para detectar a interseção de dois retângulos?

Estou procurando um algoritmo para detectar se dois retângulos se cruzam (um em um ângulo arbitrário, o outro apenas com linhas verticais / horizontais). Testar se um canto de um está no outro QUASE funciona. Ele falha se os retângulos formarem uma forma de cruz. Parece uma boa idéia evitar o uso...