Determinar si hubo o no una colisión entre dos rectángulos AABB (cuadro delimitador alineado con el eje) es trivial:
doRectanglesCollide(r1X, r1Y, r1W, r1H, r2X, r2Y, r2W, r2H) { return r1X < r2X + r2W && r1X + r1W > r2X && r1Y < r2Y + r2H && r1Y + r1H > r2Y; }Determinar si hubo o no una colisión entre dos rectángulos rotados es mucho menos eficiente.
Sin embargo, hay un truco. Uno puede rotar ambos rectángulos en la misma cantidad de modo que uno de ellos se convierta en un rectángulo AABB.
En ese punto, uno simplemente necesitaría una función que determine si un rectángulo AABB y un rectángulo girado se cruzan. Supongo que sería mucho más eficiente que usar el teorema del eje de separación para determinar si dos rectángulos girados se intersecan, ya que este último es una fórmula general para determinar si dos polígonos arbitrarios se intersecan.
Entonces, para reformular, aquí está mi pregunta: tengo dos rectángulos que están girados. En lugar de usar la respuesta vinculada, ¿no existe un algoritmo más eficiente que aproveche el hecho de que uno de los rectángulos se puede convertir en un rectángulo AABB al rotarlos a ambos por -radians ? Porque en ese punto simplemente se convierte en la pregunta de si un rectángulo AABB y un rectángulo rotado se intersecan o no.